一、程序間通訊的方式
程序間通訊的方式有很多,常用的有共享記憶體(記憶體對映檔案、共享記憶體dll、剪下板等)、命名管道和匿名管道、傳送訊息等幾種方法來直接完成,另外還可以通過
socket
口、配置檔案和登錄檔
等來間接實現程序間資料通訊任務。以上這幾種方法各有優缺點,具體到在程序間進行大資料量資料的快速交換問題上,則可以排除使用配置檔案和登錄檔的方法;另外,由於管道和
socket
二、傳送訊息實現程序間通訊前準備
下面的例子用到乙個windows api 32函式
[dllimport("user32.dll", entrypoint = "sendmessage")]
private static extern int sendmessage(intptr wnd,int msg,intptr wp,intptr lp);
要有此函式,需要新增using system.runtime.interopservices;命名空間
此方法各個引數表示的意義
wnd:接收訊息的視窗的控制代碼。如果此引數為hwnd_broadcast,則訊息將被傳送到系統中所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗,但訊息不被傳送到子視窗。
msg:指定被傳送的訊息型別。
wp:訊息內容。
lp:指定附加的訊息指定資訊。
用api參考手冊檢視sendmessage用法時,參考手冊則提示
sendmessage與
postmessage之間的區別
:sendmessage
和postmessage
,這兩個函式雖然功能非常相似,都是負責向指定的視窗傳送訊息,但是
sendmessage
() 函式發出訊息後一直等到接收方的訊息響應函式處理完之後才能返回,並能夠得到返回值,在此期間傳送方程式將被阻塞,
sendmessage
() 後面的語句不能被繼續執行,即是說此方法是同步的。而
postmessage
() 函式在發出訊息後馬上返回,其後語句能夠被立即執行,但是無法獲取接收方的訊息處理返回值,即是說此方法是非同步的。
三、傳送訊息實現程序間通訊具體步驟
1.新建windows應用程式
(1)開啟vs2008,新建乙個「windows 應用程式」,主視窗為form1,專案名稱:processcommunication
(2)在form1上新增乙個標籤為textbox1的文字框,並為form1新增keydown事件,當form1接收到kewdown訊息時,將接收到的資料顯示在label1上。
public form1()
private void form1_keydown(object sender, keyeventargs e)
(3)編譯執行,生成processcommunication.exe
2.新建windows應用程式
(1)開啟vs2008,新建乙個「windows 應用程式」,主視窗為form1,專案名稱:processcommunication1,
並在form1上新增乙個按鈕和乙個文字框
namespace processcommunication1
//win32 api函式:
[dllimport("user32.dll", entrypoint = "sendmessage")]
private static extern int sendmessage(intptr wnd,int msg,intptr wp,intptr lp);
private void button1_click(object sender, eventargs e)
} }
}
}
3.啟動processcommunication.exe可執行檔案,彈出form1窗體稱為接受訊息窗體。
啟動processcommunication1.exe可執行檔案,在彈出的窗體中的文字框中輸入任意數字,點選button1按鈕,接受訊息窗體textbox1即顯示該數字。
到此結束。
一、程序間通訊的方式
程序間通訊的方式有很多,常用的有共享記憶體(記憶體對映檔案、共享記憶體dll、剪下板等)、命名管道和匿名管道、傳送訊息等幾種方法來直接完成,另外還可以通過
socket
口、配置檔案和登錄檔
等來間接實現程序間資料通訊任務。以上這幾種方法各有優缺點,具體到在程序間進行大資料量資料的快速交換問題上,則可以排除使用配置檔案和登錄檔的方法;另外,由於管道和
socket
二、傳送訊息實現程序間通訊前準備
下面的例子用到乙個windows api 32函式
[dllimport("user32.dll", entrypoint = "sendmessage")]
private static extern int sendmessage(intptr wnd,int msg,intptr wp,intptr lp);
要有此函式,需要新增using system.runtime.interopservices;命名空間
此方法各個引數表示的意義
wnd:接收訊息的視窗的控制代碼。如果此引數為hwnd_broadcast,則訊息將被傳送到系統中所有頂層視窗,包括無效或不可見的非自身擁有的視窗、被覆蓋的視窗和彈出式視窗,但訊息不被傳送到子視窗。
msg:指定被傳送的訊息型別。
wp:訊息內容。
lp:指定附加的訊息指定資訊。
用api參考手冊檢視sendmessage用法時,參考手冊則提示
sendmessage與
postmessage之間的區別
:sendmessage
和postmessage
,這兩個函式雖然功能非常相似,都是負責向指定的視窗傳送訊息,但是
sendmessage
() 函式發出訊息後一直等到接收方的訊息響應函式處理完之後才能返回,並能夠得到返回值,在此期間傳送方程式將被阻塞,
sendmessage
() 後面的語句不能被繼續執行,即是說此方法是同步的。而
postmessage
() 函式在發出訊息後馬上返回,其後語句能夠被立即執行,但是無法獲取接收方的訊息處理返回值,即是說此方法是非同步的。
三、傳送訊息實現程序間通訊具體步驟
1.新建windows應用程式
(1)開啟vs2008,新建乙個「windows 應用程式」,主視窗為form1,專案名稱:processcommunication
(2)在form1上新增乙個標籤為textbox1的文字框,並為form1新增keydown事件,當form1接收到kewdown訊息時,將接收到的資料顯示在label1上。
public form1()
private void form1_keydown(object sender, keyeventargs e)
(3)編譯執行,生成processcommunication.exe
2.新建windows應用程式
(1)開啟vs2008,新建乙個「windows 應用程式」,主視窗為form1,專案名稱:processcommunication1,
並在form1上新增乙個按鈕和乙個文字框
namespace processcommunication1
//win32 api函式:
[dllimport("user32.dll", entrypoint = "sendmessage")]
private static extern int sendmessage(intptr wnd,int msg,intptr wp,intptr lp);
private void button1_click(object sender, eventargs e)
} }
}
}
3.啟動processcommunication.exe可執行檔案,彈出form1窗體稱為接受訊息窗體。
啟動processcommunication1.exe可執行檔案,在彈出的窗體中的文字框中輸入任意數字,點選button1按鈕,接受訊息窗體textbox1即顯示該數字。
到此結束。
php程序間通訊 yoc PHP程序間通訊
php是用c編寫的,因此它對系統底層api的操作與c很像,同大多數語言一樣,php程序間通訊的方式有以下幾種 訊息佇列,管道,共享記憶體,socket和訊號。本文是對這幾種通訊方式對整理 管道通訊pipe 管道用於承載簡稱之間的通訊資料。為了方便理解,可以將管道比作檔案,程序a將資料寫到管道p中,然...
程序間通訊
實現程序間資料共享除了常用的記憶體檔案對映外,對於一些非檔案的資料共享可以直接使用wm copydata。如果需要在程序a傳遞資料到程序b,簡單的實現如下 在程序a中 cstring strdatatosend t hello 需要傳遞的資料 hwnd hwndreceived 程序b的接收資料視窗...
程序間通訊
最近做專案遇到奇怪的問題,我在主線程中建立乙個工作執行緒。在工作執行緒中用sendmessage向主線程傳送訊息,通知主線程操作office 物件。getactiveobject時提示 hr 0x8001010d 因為應用程式正在傳送乙個輸入同步呼叫,所以無法執行傳出的呼叫。我把sendmessag...