2008-10-15 86 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));