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

时间:2010-06-14 05:29:50

标签: c# .net

我想确定 CTRL 键在按下时是 LEFT CTRL 还是 RIGHT CTRL 键。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

AFAIK您无法从.net。

中访问此信息

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

答案 2 :(得分:1)

由于您正在编写游戏,因此使用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不会告诉你的事情]

答案 3 :(得分:1)

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

Control