/// <summary> /// キーボードフック終了 /// </summary> public void Stop() { // 停止中ならそのまま終了 if (!this.Active) { return; } // フックハンドル開放 User32Lib.UnhookWindowsHookEx(this.mHookHandle); this.mHookHandle = IntPtr.Zero; return; }
/// <summary> /// キーボードプロシージャ /// </summary> /// <param name="code">コード</param> /// <param name="wParam">WPARAM値</param> /// <param name="lParam">LPARAM値</param> /// <returns>戻り値</returns> private IntPtr KeyboardHookProc(int code, IntPtr wParam, IntPtr lParam) { if (code >= 0) { if (this.KeyHookEvent != null) { int evt_code = (int)wParam; KBDLLHOOKSTRUCT param = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT)); Keys key = (Keys)param.vkCode; this.KeyHookEvent(this, new KeyHookEventArgs(evt_code, key)); } } return(User32Lib.CallNextHookEx(this.mHookHandle, code, wParam, lParam)); }
/// <summary> /// キーボードフック開始 /// </summary> public void Start() { // 動作中ならこれ以上動作させない if (this.Active) { return; } // フックハンドル取得 this.mHookHandle = User32Lib.SetWindowsHookEx(WindowsHookType.WH_KEYBOARD_LL, KeyboardHookProc, GetInstance(), 0); // フック失敗用エラー表示 if (this.mHookHandle == IntPtr.Zero) { Console.WriteLine("Last Error : 0x" + Kernel32Lib.GetLastError().ToString("x8")); } return; }