如何在Gma中获得键盘控制键.UserActivityMonitor (c#)

本文关键字:控制 UserActivityMonitor 键盘 Gma | 更新日期: 2023-09-27 18:11:52

我钩子键盘事件使用:

HookManager.KeyUp += new KeyEventHandler(HookManager_KeyUp);

然后等待keyboar事件:

public void HookManager_KeyUp(object sender, KeyEventArgs e)
{
    StepInfo step = new StepInfo();
    step.keyALT = e.Alt;
    step.keyCTRL = e.Control;
    step.keySHIFT = e.Shift;
    step.KeyHandle = e.Handled;
    step.keySuppress = e.SuppressKeyPress;
    step.keyCode = e.KeyCode;
    step.keyData = e.KeyData;
    step.keyValue = e.KeyValue;
    step.modifiers = e.Modifiers;
}

我要检查组合键shiftctrlalt和其他控制键。例子: + , ctrl + f . .等但是我所有的e.KeyData,它只返回字母键,如A, B, C,但e.Alt, e.Shift和e.Control总是"假"值。

如何检查,用户是否按Ashift+A

如何在Gma中获得键盘控制键.UserActivityMonitor (c#)

您可能会发现GetKeyboardState函数在您的情况下很有用:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms646299 (v = vs.85) . aspx

的实现可以像这样:

  [DllImport("User32.dll",
             EntryPoint = "GetKeyboardState",
             CallingConvention = CallingConvention.Winapi)]
  [return: MarshalAs(UnmanagedType.Bool)]
  internal static extern Boolean CoreGetKeyboardState(Byte[] value);
  public static Boolean IsKeyDown(Keys key) {
    Byte[] data = new Byte[256];
    if (!CoreGetKeyboardState(data))
      return false;
    return ((data[(int) key] & 0x80) == 0x80);
  }
  ...
  if (IsKeyDown(Keys.A) && 
      (IsKeyDown(key.Menu) || IsKeyDown(key.ShiftKey) || IsKeyDown(key.ControlKey))) {
    //TODO: You code here  
  }