我可以确定按Ctrl键是按下Ctrl键还是右键?

我想确定CTRL键在按下时是左键控制还是右键控制键。 我怎样才能做到这一点?

AFAIK您无法从.net中访问此信息。

但是,您可以使用Win32 API GetAsyncKeyState来测试特定键当前是否已关闭,这可以区分左右ctrl键。 (如果你正在编写一个游戏,那么你可能比Keydown处理程序更适合你,因为GetAsyncKeyState测试密钥是否“现在”下降而不是“在过去的某个时间”按下它,这相当于更好的反应能力)。

显然不是来自.NET,但它可以来自Win32 API。

  • System.Windows.Forms.Key枚举跟踪鼠标左键,右键和中键,但只有一个控制键标志,因此无法确定控制键的左侧或右侧。
  • Console.ReadKey()方法遇到同样的问题。
  • 您可以在Win32级别执行某些操作。 WM_KEYDOWN消息将跟踪扩展键(右Alt,右控制),因此Windows正在跟踪此数据…它只是没有传递给.NET。 您可以自己从.NET中获取Win32 API。

既然你正在编写游戏,那么使用DirectInput可能也会有所帮助…… Winforms并不是真正意义上的da gaimez IMO …

 Device di_device = new Device(SystemGUID.Keyboard); di_device.SetCooperativeMode(Nonexclusive|othercrap); di_device.Acquire(); if(di_device.GetKeyboardState()[Keys.LControl]) { blargh; } 

用SO文本框编写的代码,未经测试,类似的东西。 请注意,您必须包含Microsoft.DirectX.DirectInput

另请注意,我并不是说您每次需要输入时都应该启动DirectInput设备。 在您启动游戏时创建设备,在程序退出时将其丢弃。

DirectInput为您提供更多控制权……而且您可能会想要使用它。 当然在某些时候,您需要使用Winforms [即:在您的程序渲染时,如果用户很快按下按钮会怎么样? GKS不会告诉你这个]

您可以使用System.Windows.Input.Keybaord.IsKeyDown()轻松检查键盘的状态,以确定是否按下了Right Control键或Left Control键:

 if (Keyboard.IsKeyDown(Key.LeftCtrl) {} else if (Keyboard.IsKeyDown(Key.RightCtrl) {} end if