摘要:說來說去,還是覺得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...