如何在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;
}
我要检查组合键shift, ctrl, alt和其他控制键。例子: + 的, ctrl + f . .等但是我所有的e.KeyData,它只返回字母键,如A, B, C,但e.Alt, e.Shift和e.Control总是"假"值。
如何检查,用户是否按A或shift+A
您可能会发现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
}