我正在尝试通过 PostMessage 向一个应用程序发送击键。我也在使用 Spy++ 来尝试了解如何发送消息,因为我不完全了解其内部工作原理。

在这张图片中,第一个项目(选定项目)是用我自己的实际击键制作的。周围有一个红色椭圆的那个(下面)是用以下代码制作的:

WinApi.PostMessage(InsideLobbyHandle, WinApi.WM_KEYDOWN, (int)WinApi.VK_UP, 1);

我想它一定与最后一个 PostMessage() 参数有关,但我无法弄清楚它是如何工作的。我可以在原始击键中看到 ScanCode = 48,在我的为 0,fExtended 为 1,在我的为 0。我怎样才能让它看起来一样?

http://msdn.microsoft.com/en-us/library/ms646280(VS.85).aspx 中,我无法理解最后一个参数的工作原理。

最佳答案

使用 SendInput 模拟键盘输入,而不是 PostMessage。

你不能 simulate keyboard input with PostMessage

关于键盘状态/异步状态还有 some caveats :



WM_KEYDOWN Notification 的 lParam 是根据字段的位指定的:

  • 前 16 位是重复次数
  • 接下来的 8 位是扫描码
  • 扩展 key 的下一位为 1,否则为 0
  • 接下来的 4 位是保留的,必须是 0
  • 下一位始终为 0(对于 WM_KEYDOWN)
  • 下一位是之前的关键状态
  • 最后一位总是 0(对于 WM_KEYDOWN)

  • 警告:您基于 PostMessage 构建的任何解决方案都将非常脆弱。

    关于c# - WM_KEYDOWN : how to use it?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1169732/

    10-13 05:54