示例#1
0
        /// <summary>
        ///   Registers a low-level global mouse system hook.
        /// </summary>
        ///
        public static HookHandle SetWindowHook(LowLevelMouseProcedure callback)
        {
            IntPtr hHook;

            NativeMethods.LowLevelHookProc lpfn;

            using (Process process = Process.GetCurrentProcess())
                using (ProcessModule module = process.MainModule)
                {
                    IntPtr hModule = NativeMethods.GetModuleHandle(module.ModuleName);

                    lpfn = new NativeMethods.LowLevelHookProc((nCode, wParam, lParam) =>
                    {
                        // From
                        // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644986(v=vs.85).aspx
                        //
                        // wParam contains the identifier of the mouse message.
                        // lParam contains a pointer to a MOUSEHOOKSTRUCT structure.
                        //
                        // The wParam can be can be one of the following messages: WM_LBUTTONDOWN,
                        // WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_MOUSEHWHEEL, WM_RBUTTONDOWN,
                        // or WM_RBUTTONUP.

                        if (nCode < 0)
                        {
                            return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
                        }

                        MouseLowLevelHookStruct mouseInfo =
                            (MouseLowLevelHookStruct)Marshal.PtrToStructure(lParam,
                                                                            typeof(MouseLowLevelHookStruct));

                        callback((LowLevelMouseMessage)(wParam.ToInt32()), mouseInfo);

                        return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
                    });

                    hHook = NativeMethods.SetWindowsHookEx(
                        NativeMethods.HookType.WH_MOUSE_LL, lpfn, hModule, 0);
                }

            return(new HookHandle(hHook, lpfn));
        }
示例#2
0
        /// <summary>
        ///   Registers a low-level global keyboard system hook.
        /// </summary>
        ///
        public static HookHandle SetWindowHook(LowLevelKeyboardProcedure callback)
        {
            IntPtr hHook;

            NativeMethods.LowLevelHookProc lpfn;

            using (Process process = Process.GetCurrentProcess())
                using (ProcessModule module = process.MainModule)
                {
                    IntPtr hModule = NativeMethods.GetModuleHandle(module.ModuleName);

                    lpfn = new NativeMethods.LowLevelHookProc((nCode, wParam, lParam) =>
                    {
                        // From
                        // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx
                        //
                        // wParam contains the identifier of the keyboard message.
                        // lParam contains a pointer to a KBDLLHOOKSTRUCT structure.
                        //
                        // The wParam can be can be one of the following messages: WM_KEYDOWN,
                        // WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.

                        if (nCode < 0)
                        {
                            return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
                        }

                        KeyboardLowLevelHookStruct keyboardInfo =
                            (KeyboardLowLevelHookStruct)Marshal.PtrToStructure(lParam,
                                                                               typeof(KeyboardLowLevelHookStruct));

                        callback((LowLevelKeyboardMessage)(wParam.ToInt32()), keyboardInfo);

                        return(NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam));
                    });

                    hHook = NativeMethods.SetWindowsHookEx(
                        NativeMethods.HookType.WH_KEYBOARD_LL, lpfn, hModule, 0);
                }

            return(new HookHandle(hHook, lpfn));
        }
示例#3
0
        /// <summary>
        ///   Registers a low-level global keyboard system hook.
        /// </summary>
        /// 
        public static HookHandle SetWindowHook(LowLevelKeyboardProcedure callback)
        {
            IntPtr hHook;
            NativeMethods.LowLevelHookProc lpfn;

            using (Process process = Process.GetCurrentProcess())
            using (ProcessModule module = process.MainModule)
            {
                IntPtr hModule = NativeMethods.GetModuleHandle(module.ModuleName);

                lpfn = new NativeMethods.LowLevelHookProc((nCode, wParam, lParam) =>
                {
                    // From 
                    // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644985(v=vs.85).aspx
                    //
                    // wParam contains the identifier of the keyboard message.
                    // lParam contains a pointer to a KBDLLHOOKSTRUCT structure.
                    //
                    // The wParam can be can be one of the following messages: WM_KEYDOWN,
                    // WM_KEYUP, WM_SYSKEYDOWN, or WM_SYSKEYUP.

                    if (nCode < 0)
                        return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);

                    KeyboardLowLevelHookStruct keyboardInfo =
                        (KeyboardLowLevelHookStruct)Marshal.PtrToStructure(lParam,
                        typeof(KeyboardLowLevelHookStruct));

                    callback((LowLevelKeyboardMessage)(wParam.ToInt32()), keyboardInfo);

                    return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
                });

                hHook = NativeMethods.SetWindowsHookEx(
                    NativeMethods.HookType.WH_KEYBOARD_LL, lpfn, hModule, 0);
            }

            return new HookHandle(hHook, lpfn);
        }
示例#4
0
        /// <summary>
        ///   Registers a low-level global mouse system hook.
        /// </summary>
        /// 
        public static HookHandle SetWindowHook(LowLevelMouseProcedure callback)
        {
            IntPtr hHook;
            NativeMethods.LowLevelHookProc lpfn;

            using (Process process = Process.GetCurrentProcess())
            using (ProcessModule module = process.MainModule)
            {
                IntPtr hModule = NativeMethods.GetModuleHandle(module.ModuleName);

                lpfn = new NativeMethods.LowLevelHookProc((nCode, wParam, lParam) =>
                {
                    // From 
                    // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644986(v=vs.85).aspx
                    //
                    // wParam contains the identifier of the mouse message.
                    // lParam contains a pointer to a MOUSEHOOKSTRUCT structure.
                    //
                    // The wParam can be can be one of the following messages: WM_LBUTTONDOWN,
                    // WM_LBUTTONUP, WM_MOUSEMOVE, WM_MOUSEWHEEL, WM_MOUSEHWHEEL, WM_RBUTTONDOWN,
                    // or WM_RBUTTONUP.

                    if (nCode < 0)
                        return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);

                    MouseLowLevelHookStruct mouseInfo =
                        (MouseLowLevelHookStruct)Marshal.PtrToStructure(lParam,
                        typeof(MouseLowLevelHookStruct));

                    callback((LowLevelMouseMessage)(wParam.ToInt32()), mouseInfo);

                    return NativeMethods.CallNextHookEx(IntPtr.Zero, nCode, wParam, lParam);
                });

                hHook = NativeMethods.SetWindowsHookEx(
                    NativeMethods.HookType.WH_MOUSE_LL, lpfn, hModule, 0);
            }

            return new HookHandle(hHook, lpfn);
        }