C#發(fā)送消息方法簡析
C#發(fā)送消息功能的實(shí)現(xiàn)是如何的呢?最近想模擬一下鍵盤按鍵,以便作一個游戲外掛.就試著用C#實(shí)現(xiàn)此功能那么這里向你介紹具體的實(shí)現(xiàn)過程,希望那個對你有個參考的作用。
C#發(fā)送消息功能的內(nèi)涵方法:
C#中有一個Message結(jié)構(gòu),該結(jié)構(gòu)中有一個函數(shù)Create()可以用來創(chuàng)建消息.原型如下:
- public static Message Create(
- IntPtr hwnd,//接收消息的窗口句柄
- int msg, //消息 的ID,也就是一個uint
- IntPtr wparam,// 消息的Wparam域
- IntPtr lparam //消息的Lparam域
- }
比如我們要發(fā)送一個字符串到記事本:
- string text ="范俊武搞的一個窗口消息測試!";//
- char[] chars = text.ToCharArray();//轉(zhuǎn)換成數(shù)組
- foreach (char item in chars)
- {
- Message msg = Message.Create(hWnd, WM_CHAR,
- new IntPtr(item), IntPtr.Zero);
- //創(chuàng)建一個WM_CHAR消息.一會說這里邊的參數(shù)是怎么一回事
- MessageAPI.PostMessage(msg.HWnd, msg.Msg,
- msg.WParam, msg.LParam);//調(diào)用Win32API函數(shù) ,
- //關(guān)于這個函數(shù)在C#中的聲明我就不寫了網(wǎng)上有很多關(guān)于C#中平臺調(diào)用的講解.
- }
C#發(fā)送消息之WM_CHAR介紹,它是Windows中的一個消息. MSDN是這樣定義的:
The WM_CHAR message is posted to the window with the keyboard focus when a WM_KEYDOWN message is translated by the TranslateMessage function. The WM_CHAR message contains the character code of the key that was pressed.
我粘貼過來,大家看下,我英語不是很好,翻譯不過來,不過我可以看明白是咋地一回事!大致是這個意思.當(dāng)我們按下一個鍵的時候,產(chǎn)生一個WM_KEYDOWN 然后呢,這個消息被一個TranslateMessage 函數(shù)翻譯成WM_CHAR消息.顯然WM_CHAR消息攜帶了一個字符,比方說我們按了個字母"A"鍵,WM_CHAR就攜帶了"a" 這個character.
另外Create函數(shù)的第二個參數(shù)是Int型的.我們可以在Windows.h中看到WM_CHAR其實(shí)是一個常量:0x0102,一個十六進(jìn)制數(shù).WM_CHAR的ID號.代表WM_CHAR消息.
所以第二個參數(shù)是這么來的:
- const int WM_CHAR = 0x0102;
WM_CHAR的消息中 wParam 是這么定義的,又是一段英文:Specifies the character code of the key. 就是一個按鍵的字符.
WM_CHAR的消息中 lParam ,這個參數(shù)比較復(fù)雜,是一個32位數(shù),每一位都有定義.不過這個參數(shù)經(jīng)常被設(shè)置成0.
那么hWnd從哪里來的呢,就是我們要發(fā)送消息到記事本窗口的句柄.這個句柄也是一個32位值.我們可以調(diào)用Win32API函數(shù)
- string className = "Notepad";
- string captionName = "無標(biāo)題 - 記事本"; //可以通過SPY++了解到.
- IntPtr hWnd=FindWindow(className ,captionName);//找主窗口.
- hWnd = FindWindowEx(hWnd, IntPtr.Zero, "Edit", "");找主窗口中的Edit窗口.
PostMessage 就是發(fā)送消息了,各個參數(shù)都是在我們創(chuàng)建的消息Msg中包含的.挺簡單的.
至于wParam和lParam 不同的消息 會有不同的定義,我們想發(fā)送什么消息,就去MSDN中關(guān)于這個消息的定義,可以了解到wParam和lParam 的意義!
C#發(fā)送消息功能的基本內(nèi)容就向你介紹到這里,希望那個對你了解和學(xué)習(xí)C#發(fā)送消息功能有所幫助。
【編輯推薦】