Vb.net 如何确定物理密钥?

Vb.net 如何确定物理密钥?,vb.net,Vb.net,我想挂接键盘并在按下特定物理键时执行一些操作(在vb.net中) 我在网上找到了几个优秀的键盘钩子DLL,但有一个问题:钩子DLL找到的是按下的键的键码,而不是按下的物理键 例如,在美国键盘上,如果我按下右Shif键左侧的键,我会看到e.keycode:191(OemQuestion),在意大利键盘上,我会看到e.keycode 189(OemMinus) 这意味着,如果我在我的设置中输入代码“189”,意大利用户可以看到必须按下我想要的键,美国用户可以看到另一个要按下的键以进行相同的操作,因为

我想挂接键盘并在按下特定物理键时执行一些操作(在vb.net中)

我在网上找到了几个优秀的键盘钩子DLL,但有一个问题:钩子DLL找到的是按下的键的键码,而不是按下的物理键

例如,在美国键盘上,如果我按下右Shif键左侧的键,我会看到e.keycode:191(OemQuestion),在意大利键盘上,我会看到e.keycode 189(OemMinus)

这意味着,如果我在我的设置中输入代码“189”,意大利用户可以看到必须按下我想要的键,美国用户可以看到另一个要按下的键以进行相同的操作,因为在它的键盘上,OemMinus键不在右Shift键的左侧

现在的问题是:如何单音确定键盘键?我必须在确定特定物理键的.Settings中添加什么?所有键盘语言都是如此?

我认为不应该使用所谓的“物理”键来实现它。基本上,您必须知道从键代码到每个存在的“物理”键的映射,包括自定义键盘布局(您不知道)


因此我建议你像其他人一样;使用按键代码(例如键盘上的符号),而不是键盘上的按键位置(您称之为“物理键”)。

我想您需要实际连接键盘的按键开关才能做到这一点。我记得,键盘只发送按键代码,这些代码可能与电路板上按键开关的物理位置有任何相似之处,也可能与电路板上按键开关的物理位置没有任何相似之处。例如,请参阅新旧内容。

问题在于:我钩住了非热键的键,如果用户按下了非热键的键,则会收到错误消息。现在,我不知道为什么,但是根据前台的应用程序(例如扑克桌),对于相同的物理键,keycode可以更改。这意味着在一个面板中,我翻译了VisualKey中的键代码(例如,一个utalian用户看到按下“-”键来执行特定操作,这取决于foregroun中的表,他不生成189个键值,而是生成另一个ley值。该程序不识别该值并显示错误消息…我应该可以解决阻止用户将OEM键设置为热键的问题,但不幸的是,它们非常适合右键使用…就像已经存在的一样问题是,根据前台的应用程序,Oem ket并不总是生成所需的键值……如何强制它独立于前台的键盘布局/应用程序生成相同的键值?