win32 PostMessage WM_APPCOMMAND发送多条消息,而不是一条



我正在编写一个小型辅助功能应用程序,它模拟某些键盘手势,例如音量增大\减小。

目标是发送一个命令。

在实践中,音量一直高达100%,就好像用户按下了一个按钮几秒钟,或者好像消息被发送了多次。

在C和C#(使用PInvoke(中,这种行为与PostMessageSendMessage相同

C:

PostMessage(0xffff, 0x0319, 0, 0xa0000)

C#:

PostMessage(new IntPtr(0xffff), WindowMessage.WM_APPCOMMAND, (void*)0, (void*)0xa0000);

参数的含义:发送到所有窗口,消息,无来源,音量增大

问题:如何发出命令,使Windows以最小增量调整音量


此外,我尝试使用WP_KEYUP和WP_KEYDOWN,但没有成功

// dispatch to all apps, message, wparam: virtual key, lparam: repeat count = 1
User32.PostMessage(new IntPtr(0xffff), User32.WindowMessage.WM_KEYDOWN, new IntPtr(0xaf000), new IntPtr(1)); 
User32.PostMessage(new IntPtr(0xffff), User32.WindowMessage.WM_KEYUP, new IntPtr(0xaf000), new IntPtr(1));

命令被多次发送的原因是,正如Hans在评论中指出的,我使用0xffff作为第一个参数将其广播到所有窗口。每个窗口都通过增加音量来处理它。

发送多条消息的解决方案是将消息发送到任一

  1. 外壳句柄GetShellWindow()
  2. 前台窗口句柄GetForegroundWindow()

两个手柄都将音量调节了一个档位。GetDesktopWindow()没有起作用。

相关内容

最新更新