Windows下的程序通訊

2021-08-22 00:01:18 字數 1999 閱讀 4201

剪貼簿

剪貼簿(clipped board)實質是win32 api中一組用來傳輸資料的函式和訊息,為windows應用程式之間進行資料共享提供了乙個 中介,windows已建立的剪下(複製)-貼上的機制為不同應用程式之間共享不同格式資料提供了一條捷徑。當使用者在應用程式中執行剪下或複製操作時,應 用程式把選取的資料用一種或多種格式放在剪貼簿上。然後任何其它應用程式都可以從剪貼簿上拾取資料,從給定格式中選擇適合自己的格式。

剪貼簿是乙個非常鬆散的交換媒介,可以支援任何資料格式,每一格式由一無符號整數標識,對標準(預定義)剪貼簿格式,

該值是win32 api定義的常量;對非 標準格式可以使用register clipboard format函式註冊為新的剪貼簿格式。

利用剪貼簿進行交換的資料只需在資料格式上一致或都可以轉化為某種格式就行。

但剪貼簿只能在基於windows的程式中使用,不能在網路上使用。

openclipboard() setclipboarddata() closeclipboard()

openclipboard() getclipboarddata() closeclipboard()

命名管道:其中程序a建立了管道核心物件,以及用於讀寫管道的雙線程。b程序通過物件名開啟了a建立的核心物件,同時也建立了雙線程進行命名管道的讀與寫。

#define write_pipe   l"\\\\.\\pipe\\readpipe"

#define read_pipe  l"\\\\.\\pipe\\writepipe"

createnamedpipe() readfile() writefile()

createfile() readfile() writefile()

匿名管道:是不需要建立物件管道的名字。是通過核心物件的可繼承性進行的,也就是說匿名管道只能作用於父子程序之間,

在父程序建立子程序的時候通過對createprocess函式中傳參,即可讓子程序獲得父程序的核心物件控制代碼。

createpip() readfile() writefile()

//獲取子程序的標準輸入和標準輸出控制代碼,即得到管道的讀取和寫入控制代碼

hread=getstdhandle(std_input_handle);

hwrite=getstdhandle(std_output_handle);

readfile() writefile()

郵件槽:郵件槽的實現和命名管道大同小異,都是a建立物件-->a寫入資料-->b開啟a建立的物件-->b讀入資料

郵槽是基於廣播通訊體系設計出來的,採用無連線的不可靠的資料傳輸。

郵槽是一種單向通訊機制,建立郵槽的伺服器程序讀取資料,開啟郵槽的客戶機程序寫入資料。

為保證郵槽能在各種win平台下正常工作,傳輸資訊時,應將訊息長度限制在424位元組以下。

#define  mail_slot_name  l"\\\\.\\mailslot\\name" 

createmailslot() getmailslotinfo() readfile()

createfile() writefile()

訊息:這種方式是由作業系統負責給目標視窗傳遞,所以目標程序必須需要視窗,不然a得不到視窗控制代碼就無法傳遞。

通過windows訊息佇列傳遞,看起來與之前的核心物件傳遞訊息有悖,那是因為作業系統把相關細節都遮蔽掉了,如果深究起來還是通過ring0的作業系統空間核心物件進行傳遞

wm_copydata是一種非常強大卻鮮為人知的訊息。當乙個應用向另乙個應用傳送資料時,傳送方只需使用呼叫sendmessage函式,引數是目的視窗的控制代碼、傳遞資料的起始位址、wm_copydata訊息。接收方只需像處理其它訊息那樣處理wm_copy data訊息,這樣收發雙方就實現了 資料共享。

wm_copydata是一種非常簡單的方法,它在底層實際上是通過檔案對映來實現的。它的缺點是靈活性不高,並且它只能用於windows平台的單機環境下。

copydatastruct  temp; ::findwindow() ::sendmessage()

程序b需要新增wm_copydata訊息:

windows下程序通訊

1 程序與程序通訊 2 程序通訊方法 2.1 檔案對映 win32 api中共享記憶體 shared memory 實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替檔案控制代碼 handle 就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該...

Windows下程序間通訊

1 程序與程序通訊 2 程序通訊方法 2.1 檔案對映 win32 api中共享記憶體 shared memory 實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替檔案控制代碼 handle 就表示了對應的檔案對映物件是從作業系統頁面檔案訪問記憶體,其它程序開啟該...

Windows下程序通訊的幾種方式

windows 下程序通訊的幾種方式 1 程序與程序通訊 2 程序通訊方法 2.1 檔案對映 win32 api中共享記憶體 shared memory 實際就是檔案對映的一種特殊情況。程序在建立檔案對映物件時用0xffffffff來代替檔案控制代碼 handle 就表示了對應的檔案對映物件是從作業...