繁体   English   中英

WM_KEYDOWN:如何使用它?

[英]WM_KEYDOWN : how to use it?

我正试图通过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模拟键盘输入。

您无法使用PostMessage模拟键盘输入

键盘状态/异步状态仍有一些警告

SendInput函数不会重置键盘的当前状态。 因此,如果用户在调用此函数时按下任何键,则可能会干扰此函数生成的事件。 如果您担心可能的干扰,请使用GetAsyncKeyState函数检查键盘的状态,并根据需要进行更正。


WM_KEYDOWN通知的lParam是根据字段的位数指定的:

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

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

看一下http://inputsimulator.codeplex.com ,它包装了Kevin提到的SendInput方法

在Spy ++中,如果右键单击突出显示的(已记录的消息)条目并查看其属性,则可以看到lParam的确切值。 然后,您可以将其用作lParam,以确保PostMessage产生与手动操作类似的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM