【问题标题】:How to get keyboard control key in Gma.UserActivityMonitor (C#)?如何在 Gma.UserActivityMonitor (C#) 中获取键盘控制键?
【发布时间】:2013-05-02 10:16:53
【问题描述】:

我使用以下方法挂钩键盘事件:

HookManager.KeyUp += new KeyEventHandler(HookManager_KeyUp);

然后等待键盘事件:

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等控制键。 示例:shift+actrl+f ..等 但我都是 e.KeyData,它只返回 A、B、C 等字母键,但 e.Alt、e.Shift 和 e.Control 始终为“假”值。

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

【问题讨论】:

    标签: c# dll


    【解决方案1】:

    您可能会发现 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  
      }
    

    【讨论】:

      猜你喜欢
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2015-11-20
      • 1970-01-01
      相关资源
      最近更新 更多