protected int HookProcCallback(int nCode, IntPtr wParam, IntPtr lParam) { if (nCode >= 0) { try { this.OnHookCallback(new CtkWinApiEventArgsHookCallback() { nCode = nCode, wParam = wParam, lParam = lParam }); } catch (Exception ex) { ThreadPool.QueueUserWorkItem(delegate { this.OnHookCallbackException(new CtkWinApiEventArgsException() { exception = ex }); }); } try { int vkCode = System.Runtime.InteropServices.Marshal.ReadInt32(lParam); CtkEnumConst kbInput = (CtkEnumConst)wParam; if (kbInput == CtkEnumConst.WM_KEYDOWN || kbInput == CtkEnumConst.WM_SYSKEYDOWN) { keepKeys[vkCode] = true; } if (kbInput == CtkEnumConst.WM_KEYUP || kbInput == CtkEnumConst.WM_SYSKEYUP) { keepKeys[vkCode] = false; } } catch (Exception ex) { //給背景執行緒處理, 再出Exception也與原執行緒無關, 可以正常工作 ThreadPool.QueueUserWorkItem(delegate { this.OnHookCallbackException(new CtkWinApiEventArgsException() { exception = ex }); }); } } return(CtkUser32Lib.CallNextHookEx(intPtrHook, nCode, wParam, lParam)); }
internal EventArgsMouse(CtkEnumConst wParam, int x, int y, int delta) { Button = CtkWinApiEnumMouseLMR.None; switch (wParam) { case CtkEnumConst.WM_LBUTTONDOWN: case CtkEnumConst.WM_LBUTTONUP: Button = CtkWinApiEnumMouseLMR.Left; break; case CtkEnumConst.WM_RBUTTONDOWN: case CtkEnumConst.WM_RBUTTONUP: Button = CtkWinApiEnumMouseLMR.Right; break; case CtkEnumConst.WM_MBUTTONDOWN: case CtkEnumConst.WM_MBUTTONUP: Button = CtkWinApiEnumMouseLMR.Middle; break; } this.X = x; this.Y = y; this.Delta = delta; }