為了深入理解訊息機制,先來做乙個測試專案
在新建專案的form1的**中,加入方法:
protected override void defwndproc(ref message m)
else
base.defwndproc(ref m);
}此方法重寫了窗體的訊息截獲**,執行後會發現,滑鼠一移向窗體就會彈窗
對於乙個可視控制項來說,是不斷的在接受系統傳送的訊息的。比如滑鼠懸停在某某控制項上,就是乙個訊息,移出這個控制項又是乙個訊息。如示例所示,其實滑鼠移入窗體,窗體就獲得了乙個訊息,無論你寫沒寫過**,它都獲得了這個訊息,乙個訊息對應觸發乙個事件,編寫了事件**,就會執行相應的**操作。
事件裡編寫的**,和方法裡寫的**,最主要的不同就在於前者是不知道何時觸發,而後者是自己呼叫執行到那裡就執行的。
那誰來決定某個事件何時觸發呢?那就是訊息
示例中的0x200是乙個訊息型別,代表了滑鼠移入窗體這個訊息
現在討論一下如何利用這種訊息機制來在程序之間傳遞值
需求:程式a的主窗體裡有乙個全域性變數
程式b的主窗體裡有乙個按鈕,點選這個按鈕,獲取到程式a的這個變數
實現:1. 新建乙個解決方案,是程式a,窗體後台**重寫defwndproc
public partial class form1 : form
private void form1_load(object sender, eventargs e)
protected override void defwndproc(ref me m)
else
base.defwndproc(ref m); } }
2. 新建乙個解決方案,程式b,
public form1()
[dhaxhvllimport("user32.dll", entrypoint = "sendmessage")]
private static extern intptr sendmessage(intptr hwnd, int wmsg, int wparam, int lparam);
private void button2_click(object sender, eventargs e)
這樣,在按程式設計客棧鈕點選的時候,會向a傳送乙個訊息,訊息型別是104,兩個引數1和2,a能捕獲到,設定結果為333,那最後在b中的ip的值就是333
本文標題: c#使用sendmessage實現程序間通訊的方法
本文位址: /ruanjian/csharp/123722.html
在C 中使用SendMessage
在c 中使用sendmessage 日期 2005 02 04 備註 主要描述在呼叫api函式sendmessage時資料型別的轉換。sendmessage是乙個在user32.dll中宣告的api函式,在c 中匯入如下 using system.runtime.interopservices dl...
C 使用SendMessage傳遞字串
在c 中使用sendmessage,原本以為很簡單的事,卻處處碰壁。在定義訊息時忘記了使用者可定義訊息的邊界值,在網上一陣瘋找後來發現是const int wm user 0x400。接著是sendmessage的lparam型別不能決定 預設是intptr 我想傳送字串資訊,就將它定為了strin...
C 使用SendMessage傳遞字串
正文 在c 中使用sendmessage,原本以為很簡單的事,卻處處碰壁。在定義訊息時忘記了使用者可定義訊息的邊界值,在網上一陣瘋找後來發現是const int wm user 0x400。接著是sendmessage的lparam型別不能決定 預設是intptr 我想傳送字串資訊,就將它定為了st...