在不使用Windows窗体中的事件的情况下按下检测Shift键?

15 c#

我需要能够检测到shift键被保持,但我不想使用事件或全局变量来确定它.C#中是否有API可以让您询问当前按下的键而不是使用该事件?

SLa*_*aks 19

if ((Control.ModifierKeys & Keys.Shift) != 0) 
Run Code Online (Sandbox Code Playgroud)

这也将是true如果另一个修改键也下来了(例如,按Ctrl + Shift).如果要在没有任何其他修改器的情况下检查是否单独按Shift,请使用

if (Control.ModifierKeys == Keys.Shift)
Run Code Online (Sandbox Code Playgroud)

请注意,true如果另一个非修饰符向下(例如,Shift + A),即使这样也是如此.如果您想检查移位和是否移位被按下,你必须使用一个API调用.


如果您在继承的类Control(例如表单)中,则可以删除Control限定符.(static属性在继承的类中不需要限定符)


Dan*_*röm 8

Form.ModifierKeys (静态属性)

  • 这有效,但该属性继承自Control not Form (4认同)

Jos*_*rke 1

不确定这在 C# 中是否可用,但您可以调用GetAsyncKeyState。此方法返回调用该方法时键的状态。

要从 C# 调用它,您需要像任何其他 Win32 API 一样使用互操作。