我已成功使用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));
有帮助吗?

解决方案

这是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 /库/ ms644927(VS.85)的.aspx#windows_messages

其他提示

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

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

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

也许您可以在 http://www.codeproject.com找到代码。 /KB/cs/cswindowsmessages.aspx 很有用。它提供了许多常见Windows消息的C#枚举。

在我在互联网上找到的所有示例中,这个是最好的,因为它是唯一一个负责使用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)); 

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top