确定虚拟键代码是属于.NET中的扩展键还是修饰键

时间:2019-01-12 14:06:33

标签: c# .net vb.net keyboard keystroke

场景

我写了一个简单的方法,用作 PostMessage 函数的包装,以将击键发送到非活动窗口。此方法将virtual-key code作为其参数之一。

问题

理论上,修饰键和扩展键无法通过此功能发送(如许多专业程序员所评论,例如@Hans Passant的 this comment ),因此,我将想要以编程方式确定我的方法接收到的虚拟键代码参数是属于“普通”键,修饰键还是扩展键,通过这种方式,我可以使用{{3}处理这最后两种键类型}或keybd_event函数代替 PostMessage

问题

如何在C#或VB.NET中实现此目标?我总是可以写一个小的 if switch 来检测修饰键,因为它们很少,但是我找不到可以告诉我虚拟键代码是扩展键还是不是扩展键的Win32函数。

说实话,我不知道“扩展”键到底代表什么,我发现的关于该术语的唯一信息是在SendInput / WM_KEYDOWN文档中,它在表面上说了一些话。 :

  

扩展键,例如出现的右侧ALT和CTRL键   在增强的101或102键键盘上。

1 个答案:

答案 0 :(得分:0)

AFAIK, modifier keys on PC keyboards that have VK constants are the Control, Alt, Shift, and Windows keys.

Extended keys aren't properly documented anywhere, but testing confirms that, aside from the ones listed here, they are VK_APPS, VK_LWIN, VK_RWIN, VK_BROWSER_*, VK_VOLUME_*, VK_MEDIA_*, and VK_LAUNCH_*.