C 兩個獨立exe程式直接通訊

2022-07-28 11:00:48 字數 2836 閱讀 5280

從別的地方**過來,**位址不詳細,需要知道的話,可以自動去搜尋,我不是原作者。

我之前主要是用工序記憶體做過兩個程序的通訊。

兩個獨立的exe程式之間如何完成通訊呢?首先想到的辦法是利用生成檔案的方法,即,傳送端在某個目錄下生

成乙個檔案,包含要傳送的訊息,接收端從這個目錄中讀取檔案且獲取訊息。這個方法也能實現通訊,但是總感覺有

點多此一舉。能不能讓兩個exe程式直接進行通訊,傳送訊息呢?

答案是肯定的!而且還有好幾種方法。1 傳送訊息傳遞 2 共享記憶體傳遞 3 使用com程序外伺服器 ...

這篇文章主要說明一下,如何利用傳送訊息使兩個exe完成通訊。其他兩個方法感興趣可以搜尋下,都可以找到相應

的demo,這裡就不再另加說明了。

這次的demo分為兩個部分,傳送端和接收端。顧名思義分別負責傳送訊息和接收訊息。

新增這兩個窗體

傳送端**:?1

2345

6789

1011

1213

1415

1617

1819

2021

2223

2425

2627

2829

3031

3233

3435

3637

38//wm_copydata訊息所要求的資料結構

publicstruct copydatastruct

publicconstintwm_copydata =0x004a;

//通過視窗的標題來查詢視窗的控制代碼

[dllimport("user32.dll", entrypoint ="findwindow")]

privatestaticexternintfindwindow(string lpclassname, string lpwindowname);

//在dll庫中的傳送訊息函式

[dllimport("user32.dll", entrypoint ="sendmessage")]

privatestaticexternintsendmessage

(

inthwnd,// 目標視窗的控制代碼

intmsg,// 在這裡是wm_copydata

intwparam,// 第乙個訊息引數

ref  copydatastruct lparam// 第二個訊息引數

);

privatevoidbutton1_click(object sender, eventargs e)

接收端**:?1

2345

6789

1011

1213

1415

1617

1819

2021

22//wm_copydata訊息所要求的資料結構

publicstruct copydatastruct

privateconstintwm_copydata =0x004a;

//接收訊息方法

protectedoverridevoidwndproc(ref system.windows.forms.message e)

base.wndproc(ref e);

}

編譯後,找到目錄:~\bin\debug下的exe檔案執行。效果為:

上面**只是個demo為了說明問題,經常使用的話我們可以將這些方法封裝到乙個類裡面,方便復用。

總的來說,這種方法的原理就是,利用findwindow函式通過窗體標題查詢出對方的程序,然後取得視窗

handle,再通過dll庫中的sendmessage函式傳送訊息給接收端,這樣就完成了程式的直接通訊。

其他辦法也可實現,歡迎交流。

C 兩個獨立exe程式直接通訊

傳送端 wm copydata訊息所要求的資料結構 publicstruct copydatastruct publicconstintwm copydata 0x004a 通過視窗的標題來查詢視窗的控制代碼 dllimport user32.dll entrypoint findwindow pr...

C 兩個窗體間的通訊

c 實現在form1中呼叫form2的資訊的方式.方法1 首先,我們在form2中定義 private form1 mf form 其次,更改form2的建構函式為有引數的 public form2 form1 myform 最後,在form1中,在要用到form2的地方申明如下 form2 f2 ...

C 兩個窗體間的通訊

c 實現在form1中呼叫form2的資訊的方式.方法1 首先,我們在form2中定義 private form1 mf form 其次,更改form2的建構函式為有引數的 public form2 form1 myform 最後,在form1中,在要用到form2的地方申明如下 form2 f2 ...