Exemple #1
0
        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;
            }