從別的地方**過來,**位址不詳細,需要知道的話,可以自動去搜尋,我不是原作者。
我之前主要是用工序記憶體做過兩個程序的通訊。
兩個獨立的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訊息所要求的資料結構
public
struct copydatastruct
public
const
int
wm_copydata =
0x004a
;
//通過視窗的標題來查詢視窗的控制代碼
[dllimport(
"user32.dll"
, entrypoint =
"findwindow"
)]
private
static
extern
int
findwindow(string lpclassname, string lpwindowname);
//在dll庫中的傳送訊息函式
[dllimport(
"user32.dll"
, entrypoint =
"sendmessage"
)]
private
static
extern
int
sendmessage
(
int
hwnd,
// 目標視窗的控制代碼
int
msg,
// 在這裡是wm_copydata
int
wparam,
// 第乙個訊息引數
ref copydatastruct lparam
// 第二個訊息引數
);
private
void
button1_click(object sender, eventargs e)
接收端**:?1
2345
6789
1011
1213
1415
1617
1819
2021
22//wm_copydata訊息所要求的資料結構
public
struct copydatastruct
private
const
int
wm_copydata =
0x004a
;
//接收訊息方法
protected
override
void
wndproc(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 ...