2

来自http://www.quirksmode.org/dom/events/keys.html

keydown 当用户按下某个键时触发。它在用户按住键时重复。

keypress 当一个实际的字符被插入时触发,例如,一个文本输入。它在用户按住键时重复。

keyup 当用户释放一个键时触发,该键的默认操作已经执行。

C# API: http: //msdn.microsoft.com/en-us/library/ff468861 (v=vs.85).aspx

上键,下

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

4

2 回答 2

1

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

我认为您在谈论 Windows 消息。它确实存在,只是没有命名任何接近“按键”的东西。它是WM_CHAR 消息。它在 C# 应用程序中生成 KeyPress 事件。商店应用程序中更好的匹配名称,CoreWindow.CharacterReceived 事件。

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

永远不要假设您可以自己从 KeyDown 事件中合成打字字符,您无法获得准确的信息。某些键盘布局上的死键无法正确处理,您无法获取其他进程的键盘状态。

于 2013-08-05T11:30:23.027 回答
1

因为它是在keydown的消息中处理的。KEYDOWN 的文档说明了前 16 位:

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

因此,如果前 16 位大于 0,那就是你的标志KEYPRESS

我不知道它不是单独标志的确切原因。

于 2013-08-05T10:51:02.343 回答