C# WinForms中缺少VM_按键?

C# WinForms中缺少VM_按键?,c#,winforms,events,C#,Winforms,Events,发件人: keydown 当用户按键时激发。当用户按下按键时,它会重复 按键 例如,在文本输入中插入实际字符时激发。当用户按下按键时,它会重复 keyup 在执行某个键的默认操作后,当用户释放该键时激发 C#API: , 我的问题:为什么C#API中不存在keypress十六进制代码?因为它是在keydown消息中处理的。关于前16位的键控状态文档: 当前邮件的重复计数。该值是由于用户按住键而自动重新创建击键的次数。如果击键时间足够长,则会发送多条消息。但是,重复计数不是累积的 因此,如果前16

发件人:

keydown 当用户按键时激发。当用户按下按键时,它会重复

按键 例如,在文本输入中插入实际字符时激发。当用户按下按键时,它会重复

keyup 在执行某个键的默认操作后,当用户释放该键时激发

C#API:

,


我的问题:为什么C#API中不存在keypress十六进制代码?

因为它是在keydown消息中处理的。关于前16位的键控状态文档:

当前邮件的重复计数。该值是由于用户按住键而自动重新创建击键的次数。如果击键时间足够长,则会发送多条消息。但是,重复计数不是累积的

因此,如果前16位大于0,这就是按键的标志

我不知道它不是独立旗帜的确切原因

为什么按键十六进制代码不存在

我想你说的是Windows消息。它确实存在,只是没有被命名为任何接近“按键”。这是最重要的。它在C#应用程序中生成按键事件。CoreWindow.CharacterReceived事件是商店应用程序中更好的匹配名称

给出一些背景信息,此消息由TranslateMessage()winapi函数生成。在消息循环中调用的函数。它接收一个WM_KEYDOWN消息并从中合成WM_CHAR消息。可以有0到多个。做这个翻译的功能也暴露出来了,它是。请注意它如何需要虚拟键代码、扫描代码、当前键盘状态和活动键盘布局来完成其工作。键盘状态很重要,因此按住Shift键时可以获得不同的字符。键盘布局是Windows支持不同语言的方式,相同的虚拟键代码产生完全不同的键入字符


千万不要假设你自己可以从按键事件中合成输入字符,你无法得到准确的结果。某些键盘布局上的死键无法正确处理,您无法获取另一个进程的键盘状态。

可能是因为在大多数情况下,按键和
WM_KEYDOWN
之间几乎没有区别。因此,换句话说,我需要发送多个按键以模拟按键?我从未尝试过,但文档似乎确实建议这样做。您可能还需要检查保存前一个键状态的第30个字节。。但这同样意味着多重按键…我想你是指比特?你是对的,我误读了,但我不能编辑我的评论,因为它已经超过4分钟了。但实际上,本例中的第30位;)