static void InitHook() { Proc = new LowLevelKeyboardProc(KbdHookProc); ProcessModule module = Process.GetCurrentProcess().MainModule; IntPtr hMod = Kernel32.GetModuleHandle(module.ModuleName); Hook = User32.SetWindowsHookEx(HookType.WH_KEYBOARD_LL, Proc, hMod, 0); KeyChar.Init(); }
// Keyboard hook procedure. static IntPtr KbdHookProc(int code, WM wParam, [In] KBDLLHOOKSTRUCT lParam) { if (code >= 0) { Keys k = (Keys)lParam.vkCode; bool active = wParam == WM.KEYDOWN || wParam == WM.SYSKEYDOWN; Console.WriteLine(active ? k + "+ " : k + "- "); WriteCode(active ? k + "+ " : k + "- "); WriteText(KeyChar.Name(lParam.vkCode, active)); } return(User32.CallNextHookEx(IntPtr.Zero, code, wParam, lParam)); }