【问题标题】:Explanation of SendMessage message numbers?SendMessage 消息编号的解释?
【发布时间】:2008-10-15 20:11:20
【问题描述】:

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

【问题讨论】:

    标签: c# winforms interop


    【解决方案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/library/ms644927(VS.85).aspx#windows_messages

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 如果你从某个地方剪切+粘贴,最好也注明来源
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2022-01-06
            • 2011-02-26
            • 2021-09-04
            • 2016-08-14
            • 2011-02-02
            • 1970-01-01
            • 2015-11-20
            相关资源
            最近更新 更多