2008-10-15 87 views
14

我已經成功地使用Windows SendMessage方法來幫助我在文本編輯器中做各種事情,但每次我只是複製並粘貼其他人建議的代碼時,我都不知道它的含義。總是有一個神祕的消息號碼是一個參數。我怎麼知道這些代碼的意思是什麼,這樣我才能真正理解正在發生的事情,並希望將來能夠更自給自足一些?謝謝。SendMessage消息號的解釋?

最近例如:

using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
static extern int SendMessage(IntPtr hWnd, uint wMsg,UIntPtr wParam, IntPtr lParam); 

SendMessage(myRichTextBox.Handle, (uint)0x00B6, (UIntPtr)0, (IntPtr)(-1)); 

回答

3

Windows中的每條消息都由一個數字表示。在本地代碼中使用Windows SDK進行編碼時,這些由定義提供,如WM_CHAR,WM_PAINT或LVM_GETCOUNT,但這些定義不會轉移到.NET框架,因爲大多數情況下,這些消息是由.NET事件像OnKeyPressed和OnPaint,或像ListView.Items.Count這樣的方法和屬性。

在沒有包裝事件,屬性或方法的情況下,或者您需要執行上層不支持的操作時,您需要Windows在.NET框架下使用的消息編號。

找出特定數字的真正含義的最佳方法是查看Windows SDK標頭並找到該數字的定義。

0

試用PInvoke interop Assistant。該工具具有搜索功能,可以瀏覽所有已定義的窗口消息。然後它將爲這些值生成正確的C#/ VB.Net代碼。

它也不僅限於常數值。它也可以生成結構體,函數,函數指針和枚舉。

1

在我在互聯網上找到的所有例子中,這一個是最好的,因爲它是唯一一個負責顯示using System.Runtime.InteropServices的照顧者。沒有這個指令,我無法在C#中使用SendMessage。此頁面提供的Windows消息列表也非常有幫助。這裏我重複一下這個例子:

using System.Runtime.InteropServices; 

[DllImport("user32.dll")] 
static extern int SendMessage(IntPtr hWnd, uint wMsg,UIntPtr wParam, IntPtr lParam); 

SendMessage(myRichTextBox.Handle, (uint)0x00B6, (UIntPtr)0, (IntPtr)(-1));