德国键盘有一个名为“Alt Gr”的键。看起来像windows一样对待它就像按下alt + ctrl。
但我必须找出(在c#中)用户是否按下了左键ctrl。
有没有办法区分
System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key.Key.LeftCtrl)
在两种情况下都是正确的。
System.Windows.Input.Keyboard.IsKeyDown(System.Windows.Input.Key.Key.RightAlt)
也是如此。
System.Windows.Input.Keyboard.Modifiers
也会返回“Alt | Control”。
答案 0 :(得分:1)
由于我对这个问题感兴趣,我使用GLFW和C ++进行了一些研究:
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mode)
{
if (action == GLFW_PRESS) {
std::cout << std::hex << scancode << std::endl;
}
}
使用此代码,我可以看到以下扫描码:
Left Alt: 0x0038
Right Alt: 0x0138
Left Ctrl: 0x001d
Right Ctrl: 0x011d
正如您所看到的,键盘右侧的修改键有一个扩展位(感谢stuartd),因此使用GLFW可以区分alts和两个控件。
但是,在C#中使用.NET Framework时,我使用了以下回调:
private void func(object sender, KeyEventArgs e) {
MessageBox.Show(e.KeyValue.ToString());
MessageBox.Show(e.Alt.ToString());
MessageBox.Show(e.Control.ToString());
MessageBox.Show(e.Modifiers.ToString());
}
我也得到了结果:
Left Alt: 18 True False Alt
Right Alt: 17 False True Control
Left Ctrl: 17 False True Control
Right Ctrl: 17 False True Control
因此我倾向于说这是.NET Framework的限制,至少在我使用的版本(4.5.2)中,在这种情况下你的问题的答案是,不,你无法区分Left Ctrl + Right Alt
和Right Alt
。我建议您查看this answer并改用Win32 API。
另请注意,Right Alt
为Alt Gr
。