如何在Gma.UserActivityMonitor(C#)中获取键盘控制键?
我使用以下方法钩住键盘事件:如何在Gma.UserActivityMonitor(C#)中获取键盘控制键?,c#,dll,C#,Dll,我使用以下方法钩住键盘事件: 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
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和其他控制键。
示例:shift+a、ctrl+f。。等
但我所有的e.KeyData,它只返回字母键,如A、B、C,但e.Alt、e.Shift和e.Control总是“false”值
如何检查,用户是否按A或shift+A。您可能会发现GetKeyboardState函数在您的情况下很有用: 实现可以是这样的:
[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
}