来自http://www.quirksmode.org/dom/events/keys.html:
KEYDOWN 用户按下某个键时触发。当用户按下键时,它会重复。
按键 在插入实际字符时触发,例如,文本输入。当用户按下键时,它会重复。
KEYUP 在用户释放密钥后,在执行该密钥的默认操作后触发。
C#API:http://msdn.microsoft.com/en-us/library/ff468861(v=vs.85).aspx
我的问题:为什么C#API中不存在keypress十六进制代码?
答案 0 :(得分:1)
因为它是在keydown的消息中处理的。 KEYDOWN的文档说明了前16位:
当前消息的重复计数。该值是用户按住键时键击自动重复次数的次数。如果按键保持足够长的时间,则会发送多条消息。但是,重复计数不是累积计数。
因此,如果前16位大于0,那么这是KEYPRESS
的标志。
我不知道它不是一个分开的旗帜的确切原因。
答案 1 :(得分:1)
为什么不存在按键十六进制代码
我认为你在谈论Windows消息。它确实存在,它只是没有命名任何接近“按键”。这是WM_CHAR message。它在C#应用程序中生成KeyPress事件。商店应用中更好的匹配名称,即CoreWindow.CharacterReceived事件。
给出一些背景信息,此消息由TranslateMessage()winapi函数生成。您在消息循环中调用的函数。它需要WM_KEYDOWN消息并从中合成WM_CHAR消息。可以有从0到几个的任何地方。执行此转换的函数也是公开的,它是ToUnicodeEx()。请注意它需要虚拟键代码,扫描代码,当前键盘状态和活动键盘布局才能完成其工作。键盘状态很重要,因此当您按住Shift键时可以获得不同的字符。键盘布局是Windows可以支持不同语言的方式,并且具有相同的虚拟键代码可以产生完全不同的键入字符。
永远不要假设您可以自己从KeyDown事件中合成键入字符,但是无法准确。某些键盘布局上的死键无法正确处理,您无法获得其他进程的键盘状态。