我写了一个简单的方法,它充当PostMessage函数的包装器,将键击发送到非活动窗口。此方法将virtual-key code作为其参数之一。
理论上,修饰键和扩展键不能通过这个函数发送(如许多专业程序员所评论,例如@Hans Passant的this comment),所以,我想以编程方式确定我的方法是否为虚拟键代码参数接收它属于“普通”键,修饰键或扩展键,这样我就能用keybd_event或SendInput函数而不是PostMessage处理这最后两个键类型。
如何在C#或VB.NET中实现这一点?我总是可以编写一个小的if或切换来检测修饰键,因为它们只有少数,但我找不到任何可以告诉我虚拟键代码是扩展键还是不是扩展键的Win32函数。
说实话,我并不确切地知道“扩展”键代表什么,我发现的关于这个术语的唯一信息是在WM_KEYDOWN / WM_KEYUP文档中,其中它表达了非常肤浅的东西:
扩展键,例如右键ALT和CTRL键,出现在增强型101键或102键键盘上。
AFAIK,具有VK常量的PC键盘上的修改键是Control,Alt,Shift和Windows键。
扩展密钥没有在任何地方正确记录,但测试证实,除了列出的here:
键盘右侧的ALT和CTRL键; INS,DEL,HOME,END,PAGE UP,PAGE DOWN和数字小键盘左侧群集中的箭头键; NUM LOCK键; BREAK(CTRL + PAUSE)键; PRINT SCRN键;以及数字键盘中的除法(/)和ENTER键
他们是VK_APPS
,VK_LWIN
,VK_RWIN
,VK_BROWSER_*
,VK_VOLUME_*
,VK_MEDIA_*
和VK_LAUNCH_*
。