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

问题描述 投票:1回答:1

情景

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

问题

理论上,修饰键和扩展键不能通过这个函数发送(如许多专业程序员所评论,例如@Hans Passant的this comment),所以,我想以编程方式确定我的方法是否为虚拟键代码参数接收它属于“普通”键,修饰键或扩展键,这样我就能用keybd_eventSendInput函数而不是PostMessage处理这最后两个键类型。

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

说实话,我并不确切地知道“扩展”键代表什么,我发现的关于这个术语的唯一信息是在WM_KEYDOWN / WM_KEYUP文档中,其中它表达了非常肤浅的东西:

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

c# .net vb.net keyboard keystroke
1个回答
0
投票

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_APPSVK_LWINVK_RWINVK_BROWSER_*VK_VOLUME_*VK_MEDIA_*VK_LAUNCH_*

© www.soinside.com 2019 - 2024. All rights reserved.