예제 #1
0
        private IntPtr KeyboardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            GC.KeepAlive(this);
            if (nCode == 0) // HC_ACTION
            {
                if (ProcessMessage(wParam, lParam))
                {
                    return((IntPtr)1);
                }
            }

            return(Win32Calls.CallNextHookEx(new HandleRef(this, _keyboardHookHandle), nCode, wParam, lParam));
        }
예제 #2
0
        private IntPtr MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            GC.KeepAlive(this);
            if (nCode == 0) // HC_ACTION
            {
                Win32Calls.CMHSTRUCT mouseHookStruct = (Win32Calls.CMHSTRUCT)Marshal.PtrToStructure(lParam, typeof(Win32Calls.CMHSTRUCT));
                if (ProcessMessage(mouseHookStruct.hwnd, (uint)wParam, mouseHookStruct.pt, mouseHookStruct.wHitTestCode))
                {
                    return((IntPtr)1);
                }
            }

            return(Win32Calls.CallNextHookEx(new HandleRef(this, _mouseHookHandle), nCode, wParam, lParam));
        }
예제 #3
0
        private IntPtr MessageHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            GC.KeepAlive(this);
            if (nCode >= 0)
            {
                Win32Calls.CWPSTRUCT msgHookStruct = (Win32Calls.CWPSTRUCT)Marshal.PtrToStructure(lParam, typeof(Win32Calls.CWPSTRUCT));
                if (ProcessMessage(msgHookStruct.hwnd, msgHookStruct.message, msgHookStruct.wParam, msgHookStruct.lParam))
                {
                    return((IntPtr)1);
                }
            }

            return(Win32Calls.CallNextHookEx(new HandleRef(this, _messageHookHandle), nCode, wParam, lParam));
        }