【问题标题】:The lparam and wparam parameters in this specific sendmessage function?这个特定的 sendmessage 函数中的 lparam 和 wparam 参数?
【发布时间】:2014-08-06 12:50:45
【问题描述】:

我正在查看此代码 here 并且:

 Private Sub Button3_Click(ByVal sender As System.Object, 
        ByVal e As System.EventArgs) Handles Button3.Click
      SendMessage(Me.Handle, WM_APPCOMMAND, &H200EB0, 
                   APPCOMMAND_VOLUME_MUTE * &H10000)
    End Sub

我不知道 sendmessage 函数的最后两个参数是什么,这两个参数是怎么回事? “&H200EB0”和“APPCOMMAND_VOLUME_MUTE * &H10000”参数?

这是完整的代码:

    Imports System.Runtime.InteropServices
Public Class Form1
    <DllImport("user32.dll", SetLastError:=True, CharSet:=CharSet.Auto)> 
    Private Shared Function SendMessage(ByVal hWnd As IntPtr, 
                    ByVal Msg As UInteger, ByVal wParam As IntPtr, 
                    ByVal lParam As IntPtr) As IntPtr
    End Function

    Const WM_APPCOMMAND As UInteger = &H319
    Const APPCOMMAND_VOLUME_UP As UInteger = &HA
    Const APPCOMMAND_VOLUME_DOWN As UInteger = &H9
    Const APPCOMMAND_VOLUME_MUTE As UInteger = &H8

    Private Sub Button1_Click(ByVal sender As System.Object, 
             ByVal e As System.EventArgs) Handles Button1.Click
        SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, 
                    APPCOMMAND_VOLUME_UP * &H10000)
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, 
                 ByVal e As System.EventArgs) Handles Button2.Click
        SendMessage(Me.Handle, WM_APPCOMMAND, &H30292, 
                    APPCOMMAND_VOLUME_DOWN * &H10000)
    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, 
           ByVal e As System.EventArgs) Handles Button3.Click
        SendMessage(Me.Handle, WM_APPCOMMAND, &H200EB0, 
                    APPCOMMAND_VOLUME_MUTE * &H10000)
    End Sub
End Class

【问题讨论】:

标签: vb.net winapi dllimport sendmessage


【解决方案1】:

SendMessage 是一种可用于向一个或多个窗口发送指定消息的方法。

文档在这里:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx

第一个参数是发送消息的“句柄”(HWND)。第二个参数是消息 ID(请参阅http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx#system_defined 了解系统定义的消息)。

最后两个参数可用于向接收器传递更多数据。 - 通常两个参数都有消息相关的含义。

在您的情况下,传递了 WM_APPCOMMAND 消息 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646275%28v=vs.85%29.aspx)(这里是键盘命令)。我认为第一个参数也可以是 NULL(根据上面的链接,它应该是用户单击按钮或按下键的窗口的句柄),但第二个参数必须指定应该传递的命令(如APPCOMMAND)。第二个参数是 8(根据链接页面上的列表,8=APPCOMMAND_VOLUME_MUTE),但是我们必须进行位移,因为信息必须编码在参数的高位(即 0x80000 - 那是 APPCOMMAND_VOLUME_MUTE *&H10000;请参阅我链接页面上的 lParam 部分)。

【讨论】:

  • 感谢您的回复。最后两个参数在这个特定实例中的含义是什么?这就是我要问的。请帮帮我。
  • 再次阅读documentation for WM_APPCOMMAND,它会告诉您参数的含义。 wParam 是被点击的HWNDlParam 是命令、设备和键位的组合。在您的示例中,lParam 是与FAPPCOMMAND_OEM 标志混合的音量命令。
猜你喜欢
  • 1970-01-01
  • 2012-06-01
  • 2011-01-31
  • 2017-10-02
  • 2016-10-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
相关资源
最近更新 更多