public static void OperateKey(User32.VirtualKey virtualKey, KeyStatus keyStatus) { // keybd_event //第一个参数:虚拟键码 //第二个参数:硬件扫描码,一般设置为0即可; //第三个参数:函数操作的一个标志位,如果值为KEYEVENTF_EXTENDEDKEY则该键被按下,也可设置为0即可,如果值为KEYEVENTF_KEYUP则该按键被释放; //第四个参数:定义与击键相关的附加的32位值,一般设置为0即可。 switch (keyStatus) { case KeyStatus.Press: User32.keybd_event(virtualKey.ToByte(), 0, User32.KEYEVENTF.KEYEVENTF_UNICODE, IntPtr.Zero); Thread.Sleep(TimeSpan.FromMilliseconds(50)); break; case KeyStatus.Release: User32.keybd_event(virtualKey.ToByte(), 0, User32.KEYEVENTF.KEYEVENTF_KEYUP, IntPtr.Zero); Thread.Sleep(TimeSpan.FromMilliseconds(50)); break; case KeyStatus.Click: User32.keybd_event(virtualKey.ToByte(), 0, User32.KEYEVENTF.KEYEVENTF_UNICODE, IntPtr.Zero); Thread.Sleep(TimeSpan.FromMilliseconds(50)); User32.keybd_event(virtualKey.ToByte(), 0, User32.KEYEVENTF.KEYEVENTF_KEYUP, IntPtr.Zero); Thread.Sleep(TimeSpan.FromMilliseconds(50)); break; default: break; } }
private static uint SendKeyAction(bool keyDown, User32.VirtualKey virtualKey) { var key = new User32.INPUT { type = User32.InputType.INPUT_KEYBOARD, Inputs = new User32.INPUT.InputUnion() { ki = new User32.KEYBDINPUT() { dwFlags = (keyDown ? 0 : User32.KEYEVENTF.KEYEVENTF_KEYUP), wVk = virtualKey } } }; var inputs = new[] { key }; var response = User32.SendInput(inputs.Length, inputs, Marshal.SizeOf(key)); return(response); }
public HotkeyHandler(User32.VirtualKey key, User32.ModifierKeys modkey, HotkeyAction action) { this.Key = key; this.ModKey = modkey; this.Action = action; }
public static byte ToByte(this User32.VirtualKey virtualKey) { return(byte.Parse(((int)virtualKey).ToString())); }