SendMessage消息号的说明?

时间:2008-10-15 20:11:21

标签: c# winforms interop

我已成功使用Windows 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));

5 个答案:

答案 0 :(得分:3)

这是Windows消息代码 它们在头文件中定义,通常可以翻译为包含不同语言的某种类型。

例如:
WM_MOUSEMOVE =& H200
MK_CONTROL =& H8
MK_LBUTTON =& H1
MK_MBUTTON =& H10
MK_RBUTTON =& H2
MK_SHIFT =& H4
MK_XBUTTON1 =& H20
MK_XBUTTON2 =& H40

http://msdn.microsoft.com/en-us/library/ms644927(VS.85).aspx#windows_messages

答案 1 :(得分:3)

Windows中的每条消息都由一个数字表示。在本机代码中使用Windows SDK进行编码时,这些定义由WM_CHAR,WM_PAINT或LVM_GETCOUNT等定义提供,但这些定义不会转移到.NET框架,因为在大多数情况下,消息由.NET事件包装像OnKeyPressed和OnPaint,或方法和属性,如ListView.Items.Count。

在没有包装事件,属性或方法的情况下,或者您需要执行更高级别不支持的操作时,您需要Windows在.NET框架下使用的消息编号。

找出特定数字实际意味着什么的最佳方法是查看Windows SDK标头并找到该数字的定义。

答案 2 :(得分:2)

也许你会发现http://www.codeproject.com/KB/cs/cswindowsmessages.aspx的代码很有用。它提供了许多常见Windows消息的C#枚举。

答案 3 :(得分:1)

在我在互联网上找到的所有例子中,这个是最好的,因为它是唯一一个负责显示using System.Runtime.InteropServices的例子。如果没有这个指令,我就无法让SendMessage在c#中工作。此页面提供的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)); 

答案 4 :(得分:0)

试用PInvoke interop Assistant。此工具具有搜索功能,允许您浏览所有已定义的Windows消息。然后它将为这些值生成正确的C#/ VB.Net代码。

它也不仅限于常数值。它还可以生成结构,函数,函数指针和枚举。