如何以编程方式区分 AltGr 和 Ctrl+RAlt(osk.exe 以某种方式做到这一点)

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

众所周知,在大多数键盘国家布局中,右侧 Alt 键的功能相当于 AltGr。然而,AltGr并不是一个“真正的”键;它没有特定的 VirtualKeyCode/ScanCode,并且以编程方式,它的按下显示为两次单独的连续按下:

  1. 向左 Ctrl
  2. Alt

Stack Overflow 上的多个讨论与此相关,但到目前为止,没有人提出一种方法来以编程方式区分 AltGr 当前是否被按下,或者它是否是 LCtrl+RAlt 的组合。

同时,有理由相信这是可能的,因为 OSK(屏幕键盘,

C:\Windows\System32\osk.exe
)应用程序对它们进行了区分。通过试验按键并观察屏幕上相应的按键变化,可以轻松验证这一点。

因此,问题仍然存在:如何以编程方式区分 AltGrLCtrl+RAlt

我尝试观察按 AltGr 触发的事件序列,寻找 INPUT_RECORD 结构中的任何特征。

我还尝试通过

GetKeyState
确定
VK_LCONTROL
VK_RCONTROL
VK_LMENU
VK_RMENU键的状态。但是,我没有找到任何特定于 AltGr 的内容可以将其与按 LCtrl+RAlt 区分开来。

尽管如此,屏幕键盘(OSK)以某种方式解决了这个问题。例如,您可以按下(并按住)Ctrl+AltGr,它将显示按键已被单独按下。

附注

请注意,Windows: Detect if right alt generated Ctrl+Alt (AltGr) in current layout有类似的问题。

但是,该问题略有不同:它询问如何辨别键盘布局是否将 RAlt 视为 AltGr。另一方面,我试图找出一些略有不同的东西。

windows winapi keyboard on-screen-keyboard
1个回答
0
投票

右侧 Alt 键相当于 AltGr 键(与 Scancode 相同)。如果您没有正确的 Alt 键,则可以使用 Ctrl + Left Alt 来模拟 AltGr 组合键,并使用 Shift + Ctrl + Left Alt 来模拟 Windows 中的 Shift + AltGr 组合键。

您可以在英国键盘中进行测试。 enter image description here

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