C 使用SendMessage實現程序間通訊的方法

2022-10-05 23:54:11 字數 1257 閱讀 6057

為了深入理解訊息機制,先來做乙個測試專案

在新建專案的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...