/// <summary> /// グローバルフックを登録します。 /// </summary> /// <param name="proc">コールバックメソッドを指定します。</param> /// <returns>SetWindowsHookEx 関数の戻り値を返します。</returns> private IntPtr SetHook(KeyboardHookEventHandler proc) { using (var module = Process.GetCurrentProcess().MainModule) { return(SetWindowsHookEx((int)User32.WHs.WH_KEYBOARD_LL, proc, GetModuleHandle(module.ModuleName), 0)); } }
/// <summary> /// 重载:设置Keyboard钩子(开始Hook) /// </summary> public void InstallHook(UserKeyboardHookEventHandler userKeyboardProc) { userProcKeyboard = userKeyboardProc; //传入UserKeyboardHookEventHandler方法的入口地址 procKeyboard = new KeyboardHookEventHandler(KeyboardHookCallback); //告知钩子子程的具体实现 hookID = SetWindowsHookEx( HookType, // 钩子的类型 procKeyboard, //钩子子程的入口地址,当钩子钩到任何消息后便调用钩子子程 GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), //应用程序实例的句柄 0); //0表示钩子子程与所有的线程关联(全局钩子) }
private static extern IntPtr SetWindowsHookEx(int idHook, KeyboardHookEventHandler lpfn, IntPtr hMod, uint dwThreadId);
/// <summary> /// キーボードフックを開始します。 /// </summary> public void Hook() { this._hookHandler = HookProc; this._hookID = SetHook(this._hookHandler); }