使用C 在應用程式間傳送訊息

2021-04-02 12:36:15 字數 1539 閱讀 4784

摘要:說來說去,還是覺得api的功能是最強大的,但是.net fcl,mfc等對api的封裝之後也使得程式的開發變得更加容易。本模組的主要原理還是使用api,查詢指定型別,視窗文字的視窗物件,獲取該物件的指標。然後操作該物件。

例項1:

建立乙個c#windows form應用程式,向視窗中新增乙個按鈕button1,新增事件相應函式:

private void button1_click(object sender, system.eventargs e)

例項2:

建立乙個c# windows form應用程式,新增乙個按鈕控制項button1

1:新增using system.runtime.interopservices;

2: 新增對api的引用:

[dllimport("user32.dll")]

public static extern intptr findwindow(string lpclassname, string lpwindowname);

[dllimport("user32.dll")]

public static extern intptr findwindowex(intptr hwndparent,intptr hwndchildafter,string lpszclass,string lpszwindow);

[dllimport("user32.dll", charset=charset.unicode)] 

public static extern intptr postmessage(intptr hwnd,int wmsg,intptr wparam,intptr lparam);

3:新增button1的相應函式:

private void button1_click(object sender, system.eventargs e)

{intptr hwnd_win ;          // 存放例項1中的form1視窗的視窗控制代碼

intptr hwnd_button ;     // 存放例項1中的form1中的button1控制項的視窗控制代碼

// 引數1:視窗型別,引數2:視窗名稱

// 引數1:父視窗控制代碼,   引數2:子視窗指標;引數3:視窗型別;引數4:視窗文字

// 定義待傳送的訊息  

const int bm_click = 0x00f5;

message msg = message.create(hwnd_button ,bm_click ,new intptr(0),new intptr(0));

// 向form1視窗的button1控制項傳送bm_click訊息   

postmessage(msg.hwnd ,msg.msg ,msg.wparam ,msg.lparam);

總結:其實c#幕後還是採用的訊息處理機制,本創許也充分利用了windows的訊息處理機之。

附帶乙個獲取視窗型別的技巧:使用spy ++就可以獲取任何視窗的視窗型別。

所有的類似於wm_char,wm_command等訊息的值,可以在.net目錄下的winuser.h檔案中查詢到。

應用程式傳送訊息到外部

以瀏覽器訪問url為例子 1 生成請求訊息 2 向dns伺服器查詢web伺服器ip位址 3 委託協議棧傳送訊息 這裡僅先介紹請求訊息,後續將介紹其他的內容 不同的url,其訪問目標不一樣,其寫法也不一樣 如 這些url雖然寫法不同,但是其開頭的文字如 http 等都表示瀏覽器應當使用的訪問方法,表明...

應用程式間訊息的互發

zzz同樣是 windows環境下32位組合語言程式設計 書中的例子,程式a向程式b傳送訊息,程式b響應這個訊息,如下 code 傳送程式 include windows.h intwinapi winmain hinstance hinstance,hinstance hprevinstance,...

C 怎樣擷取系統向應用程式傳送的訊息

眾所周知,windows會為每乙個應用程式建立乙個訊息佇列,通過向應用程式傳送訊息告知應用程式使用者做了哪些操作,那麼如果我想擷取這些訊息進行重定義,該怎麼做呢?這裡有兩種方法 1.重寫窗體的wndproc方法,實現如下 public partial class form5 form protect...