private void GKH_KeyUp(object sender, KeyEventArgsEx e) { if (gkh.HookForAny) { mouse_panel.Focus(); e.Handled = true; } else { if (Simulate) { if (IsToSimulate(e)) { SimulateKeyUp(e); e.Handled = true; } } if (e.Key == Exchange.Preference.Activation) { KeyState.Activation = ButtonState.Up; e.Handled = true; } } }
private void GKH_KeyDown(object sender, KeyEventArgsEx e) { if (gkh.HookForAny) { AssignKey(e); e.Handled = true; } else { if (Simulate) { if (IsToSimulate(e)) { SimulateKeyDown(e); e.Handled = true; } } if (e.Key == Exchange.Preference.Activation && KeyState.Activation == ButtonState.Up) { GKH_GlobalKeyPress(this, new EventArgs()); KeyState.Activation = ButtonState.Down; e.Handled = true; } } }
/// <summary> /// The callback for the keyboard hook /// </summary> /// <param name="code">The hook code, if it isn't >= 0, the function shouldn't do anyting</param> /// <param name="wParam">The event type</param> /// <param name="lParam">The keyhook event information</param> /// <returns></returns> public int hookProc(int code, int wParam, ref keyboardHookStruct lParam) { if (code >= 0) { bool extended = (lParam.flags & LLKHF_EXTENDED) == LLKHF_EXTENDED; Console.WriteLine(string.Format("Scan Code: {0} Virtual Key Code: {1} Is Extended: {2} Flag: {3} Extra Info: {4}", lParam.scanCode, lParam.vkCode, extended.ToString(), lParam.flags, lParam.dwExtraInfo)); ExtendedKey key = new ExtendedKey((Keys)lParam.vkCode, extended, lParam.scanCode); if (HookedKeys.Contains(key) || HookForAny) { KeyEventArgsEx kea = new KeyEventArgsEx(key); if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null)) { KeyDown(this, kea); } else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null)) { KeyUp(this, kea); } if (kea.Handled) { return(1); } } } return(CallNextHookEx(hhook, code, wParam, ref lParam)); }
private bool IsToSimulate(KeyEventArgsEx e) { foreach (KeyInput KI in KeyInputs) { if (e.Key == KI.Key) { return(true); } } return(false); }
private void SimulateKeyUp(KeyEventArgsEx e) { if (e.Key == up_left.Key) { KeyState.UpLeft = ButtonState.Up; } if (e.Key == up_right.Key) { KeyState.UpRight = ButtonState.Up; } if (e.Key == down_left.Key) { KeyState.DownLeft = ButtonState.Up; } if (e.Key == down_right.Key) { KeyState.DownRight = ButtonState.Up; } if (e.Key == left.Key) { KeyState.Left = ButtonState.Up; } if (e.Key == right.Key) { KeyState.Right = ButtonState.Up; } if (KeyState.Left == ButtonState.Up && KeyState.Right == ButtonState.Up && AllDiagonalUp()) { KeyState.ih = 0; } if (e.Key == up.Key) { KeyState.Up = ButtonState.Up; } if (e.Key == down.Key) { KeyState.Down = ButtonState.Up; } if (KeyState.Up == ButtonState.Up && KeyState.Down == ButtonState.Up && AllDiagonalUp()) { KeyState.iv = 0; } if (e.Key == wheel_up.Key) { KeyState.WheelUp = ButtonState.Up; } if (e.Key == wheel_down.Key) { KeyState.WheelDown = ButtonState.Up; } if (KeyState.WheelUp == ButtonState.Up && KeyState.Down == ButtonState.Up) { KeyState.iw = 0; } if (e.Key == lmb.Key && MouseState.LeftButton != ButtonState.Up) { msim.ButtonUp(Buttons.LMB); MouseState.LeftButton = ButtonState.Up; } if (e.Key == rmb.Key && MouseState.RightButton != ButtonState.Up) { msim.ButtonUp(Buttons.RMB); MouseState.RightButton = ButtonState.Up; } if (e.Key == mmb.Key && MouseState.MiddleButton != ButtonState.Up) { msim.ButtonUp(Buttons.MMB); MouseState.MiddleButton = ButtonState.Up; } if (e.Key == Exchange.Preference.DoubleClick) { KeyState.DoubleClick = ButtonState.Up; } if (e.Key == Exchange.Preference.Drag) { KeyState.Drag = ButtonState.Up; } }
private void SimulateKeyDown(KeyEventArgsEx e) { int max_ma = Exchange.Preference.MaxSpeed; int max_wa = Exchange.Preference.MaxWheelSpeed; if (e.Key == up_left.Key) { KeyState.UpLeft = ButtonState.Down; } if (e.Key == up_right.Key) { KeyState.UpRight = ButtonState.Down; } if (e.Key == down_left.Key) { KeyState.DownLeft = ButtonState.Down; } if (e.Key == down_right.Key) { KeyState.DownRight = ButtonState.Down; } if (e.Key == left.Key) { KeyState.Left = ButtonState.Down; } if (e.Key == right.Key) { KeyState.Right = ButtonState.Down; } if (KeyState.Left == ButtonState.Down || KeyState.Right == ButtonState.Down || AnyDiagonalDown()) { KeyState.ih += Exchange.Preference.MovementAcceleration; if (KeyState.ih > max_ma) { KeyState.ih = max_ma; } } if (e.Key == up.Key) { KeyState.Up = ButtonState.Down; } if (e.Key == down.Key) { KeyState.Down = ButtonState.Down; } if (KeyState.Up == ButtonState.Down || KeyState.Down == ButtonState.Down || AnyDiagonalDown()) { KeyState.iv += Exchange.Preference.MovementAcceleration; if (KeyState.iv > max_ma) { KeyState.iv = max_ma; } } if (e.Key == wheel_up.Key) { KeyState.WheelUp = ButtonState.Down; } if (e.Key == wheel_down.Key) { KeyState.WheelDown = ButtonState.Down; } if (KeyState.WheelUp == ButtonState.Down || KeyState.WheelDown == ButtonState.Down) { KeyState.iw += Exchange.Preference.WheelAcceleration; if (KeyState.iw > max_wa) { KeyState.iw = max_wa; } } if (e.Key == lmb.Key && MouseState.LeftButton != ButtonState.Down) { msim.ButtonDown(Buttons.LMB); MouseState.LeftButton = ButtonState.Down; } if (e.Key == rmb.Key && MouseState.RightButton != ButtonState.Down) { msim.ButtonDown(Buttons.RMB); MouseState.RightButton = ButtonState.Down; } if (e.Key == mmb.Key && MouseState.MiddleButton != ButtonState.Down) { msim.ButtonDown(Buttons.MMB); MouseState.MiddleButton = ButtonState.Down; } if (e.Key == Exchange.Preference.Drag && KeyState.Drag == ButtonState.Up) { if (MouseState.LeftButton == ButtonState.Up) { msim.ButtonDown(Buttons.LMB); MouseState.LeftButton = ButtonState.Down; } else if (MouseState.LeftButton == ButtonState.Down) { msim.ButtonUp(Buttons.LMB); MouseState.LeftButton = ButtonState.Up; } KeyState.Drag = ButtonState.Down; } if (e.Key == Exchange.Preference.DoubleClick && KeyState.DoubleClick == ButtonState.Up) { KeyState.DoubleClick = ButtonState.Down; msim.ButtonDown(Buttons.LMB); System.Threading.Thread.Sleep(Exchange.Preference.ClickSpeed); msim.ButtonUp(Buttons.LMB); System.Threading.Thread.Sleep(Exchange.Preference.DoubleClickDelay); msim.ButtonDown(Buttons.LMB); System.Threading.Thread.Sleep(Exchange.Preference.ClickSpeed); msim.ButtonUp(Buttons.LMB); } }
private void AssignKey(KeyEventArgsEx e) { if (e.KeyCode != Keys.Escape) { if (current.Name != "activation") { if (e.Key == Exchange.Preference.Activation) { MessageBox.Show("You may not assign currently assigned activation key for other use, please change the activation key first", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); return; } } current.Key = e.Key; gkh.HookedKeys[KeyInputs.IndexOf(current)] = current.Key; foreach (KeyInput ki in KeyInputs) { if (ki != current && ki.Key == e.Key) { ki.Key = new ExtendedKey(); } } if (current.Name == "activation") { if (Simulate) { start_button.Text = "Stop (" + current.Key.ToString() + ")"; } else { start_button.Text = "Start (" + current.Key.ToString() + ")"; } } switch (current.Name) { case "lmb": Exchange.Preference.LMB = current.Key; break; case "rmb": Exchange.Preference.RMB = current.Key; break; case "mmb": Exchange.Preference.MMB = current.Key; break; case "wheel_up": Exchange.Preference.WheelUp = current.Key; break; case "wheel_down": Exchange.Preference.WheelDown = current.Key; break; case "left": Exchange.Preference.Left = current.Key; break; case "right": Exchange.Preference.Right = current.Key; break; case "up": Exchange.Preference.Up = current.Key; break; case "down": Exchange.Preference.Down = current.Key; break; case "activation": Exchange.Preference.Activation = current.Key; break; case "double_click": Exchange.Preference.DoubleClick = current.Key; break; case "drag": Exchange.Preference.Drag = current.Key; break; case "up_left": Exchange.Preference.UpLeft = current.Key; break; case "up_right": Exchange.Preference.UpRight = current.Key; break; case "down_left": Exchange.Preference.DownLeft = current.Key; break; case "down_right": Exchange.Preference.DownRight = current.Key; break; } Exchange.Preference.Save(); } }