2010-06-14 96 views

回答

1

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

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

1

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

  • System.Windows.Forms.Key枚举轨道左,右,和中间鼠标按钮,但只具有用于控制键一个标记,所以没有办法来确定用于控制键左边或右边。
  • Console.ReadKey() method患有同样的问题。
  • 您可能可以在Win32级别上做些什么。 WM_KEYDOWN message将跟踪扩展的键(右Alt,右控制),所以Windows正在跟踪这些数据......它只是没有被传递给.NET。关于从.NET内部进入Win32 API,你是独一无二的。
1

既然你写一个游戏,它可能是有帮助的也使用DirectInput的...的WinForms是不是真的意味着达gaimez IMO ......写在SO文本

Device di_device = new Device(SystemGUID.Keyboard); 
di_device.SetCooperativeMode(Nonexclusive|othercrap); 
di_device.Acquire(); 

if(di_device.GetKeyboardState()[Keys.LControl]) 
{ 
    blargh; 
} 

代码,未经考验,就像那样。请注意,您必须包含Microsoft.DirectX.DirectInput

另请注意,我并不是说您每次需要输入时都应该初始化DirectInput设备。在初始化游戏时创建设备,在程序退出时处理它。

DirectInput为您提供了更多的控制...而且很可能您将要使用它。当然,在某些情况下,你需要使用Winforms [也就是说:当你的程序正在渲染时,如果用户很快按下按钮会怎么样? GKS不会告诉你]

相关问题