Параметры lparam и wparam в этой конкретной функции sendmessage?
Я проходил этот код здесь и:
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
1 ответ
SendMessage - это метод, который можно использовать для отправки указанного сообщения окну или окнам.
Документация находится здесь: http://msdn.microsoft.com/en-us/library/windows/desktop/ms644950%28v=vs.85%29.aspx
Первый параметр - это "дескриптор" (HWND), на который отправляется сообщение. Второй параметр - это идентификатор сообщения (см. http://msdn.microsoft.com/en-us/library/windows/desktop/ms644927(v=vs.85).aspx для системных сообщений).
Последние два параметра могут использоваться для передачи большего количества данных получателю. - Обычно оба параметра имеют значение, зависящее от сообщения.
В вашем случае передается сообщение 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 на странице, на которую я ссылался).