我正在编写一个小型辅助功能应用程序,该应用程序可模拟某些键盘手势,例如提高音量或降低音量。
目标是发送单个命令。
实际上,音量一直上升到100%,就像用户按下按钮几秒钟或好像多次发送邮件一样。
在C和C#中(使用PInvoke),PostMessage
和SendMessage
的行为相同。
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));
答案 0 :(得分:0)
多次发送命令的原因是,正如汉斯在评论中指出的那样,我将0xffff
作为第一个参数将其广播到了所有窗口。每个窗口通过增加一个缺口来处理它。
发送多条消息的解决方案是将消息发送给任一方
GetShellWindow()
GetForegroundWindow()
两个手柄均将音量调节了一个档次。 GetDesktopWindow()
无效。