14

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

5 回答 5

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

于 2008-10-15T20:19:46.210 回答
3

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

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

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

于 2008-10-15T20:19:48.783 回答
2

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

于 2010-01-22T03:56:48.283 回答
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)); 
于 2010-03-22T18:06:49.207 回答
0

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

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

于 2008-10-16T17:29:19.470 回答