- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一、IPC(InterprocessCommunication)就是处理序间通讯。我们都
一、
IPC(Inter process Communication)就是“處理序間通訊”。我們都知道,在windows系統中,各個應用程式(進程)之間常常需要交換、傳遞資料,這就要解決進程間的資料通信問題。在最初的16位Windows3.x系統中,所有Windows應用程式共用單一位址,任何進程都能夠對這一共用位址空間的資料進行讀寫操作。
隨著Windwos98、Windows NT、Windows2000等32位元的作業系統的出現,每個進程都有自己的位址空間,一個Windows進程不能存取另一個進程的私有資料,也就是說,雖然兩個進程可以用具有相同值的指標定址,但所讀寫的只是它們各自的資料,這樣就減少了進程之間的相互干擾。
二、如何實現IPC
那麼在windows當前系統下,如何實現進程通訊呢?其實有很多方法,如:
1、 剪貼板Clipboard
2、 DDE(動態資料交換)
3、 記憶體映射
4、 消息管道
5、 郵件槽
6、 Socket
7、 RPC
8、 串列/並行通信(Serial/Parallel Communication)
9、 COM/DCOM
10、Windows消息
三、基於Windows消息的IPC
現在讓我們進入今天我們要講的主題:“基於Windows消息的IPC實現”。
在這裡,我假定大家對Windows消息機制都有很好的理解,所以我就不在這上面費太多的墨水了。我們直接看看Windows消息是怎麼樣實現處理序間通訊的。我們首先看看Windows的消息常數:
WM_COPYDATA=0x004A// 當一個應用程式傳遞資料給另一個應用程式時發送此消息。
這就是我們要的。下面我們來看看如何利用它來實現IPC。
讓我們先看看幾個API函數,沒有它們,我們沒有辦法將資料發送出去。
1、 PostMessage
函數功能:該函數將一個消息放入(寄送)到與指定視窗創建的執行緒相聯繫訊息佇列裡,不等待中的執行緒處理消息就返回。訊息佇列裡的消息通過調用GetMessage和PeekMessage取得。
函數原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM lParam);
參數
hWnd:其視窗程式接收消息的視窗的控制碼。可取有特定含義的兩個值:
HWND.BROADCAST:消息被寄送到系統的所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗。消息不被寄送到子窗口。
NULL:此函數的操作和調用參數dwThread設置為當前執行緒的識別字PostThreadMessage函數一樣。
Msg:指定被寄送的消息。
wParam:指定附加的消息特定的資訊。
IParam:指定附加的消息特定的資訊。
返回值:如果函式呼叫成功,返回非零值:如果函式呼叫失敗,返回值是零。若想獲得更多的錯誤資訊,請調用GetLastError函數。
2、 SendMessage
函數功能:該函數將指定的消息發送到一個或多個視窗。此函數為指定的視窗調用視窗程式,直到視窗程式處理完消息再返回。而函數PostMessage不同,將一個消息寄送到一個執行緒的訊息佇列後立即返回。
函數原型:LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
參數:
hWnd:其視窗程式將接收消息的視窗的控制碼。如果此參數為HWND_BROADCAST,則消息將被發送到系統中所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗,但消息不被發送到子窗口。
Msg:指定被發送的消息。
wParam:指定附加的消息指定資訊。
IParam:指定附加的消息指定資訊。
返回值:返回值指定消息處理的結果,依賴於所發送的消息。
3、 RegisterWindowMessage
函數功能:RegisterWindowMessage函式定義一個新的視窗消息,該消息保證在整個系統範圍內是唯一的。調用SendMessage或PostMessage函數時可以使用該函數返回的消息值。
函數原型:UINT RegisterWindowMessage(lpsz)
參數:
lpsz指向一個以NULL結束的字串,該字串指定待登記的消息。
返回值:若成功地登記了消息,返回值是一個消息識別字。該識別字值的範圍在0XC000到0XFFFF之間,否則,返回值為0。
我們現在在C#中聲明這些API函數:
[DllImport(user32)]internal static extern int RegisterWindowMessage(string lpString);[DllImport(user32
文档评论(0)