コード例 #1
0
        private void lowLevelKeyboardProcHook(LowLevelKeyboardMessage message, KeyboardLowLevelHookStruct info)
        {
            switch (message)
            {
            case LowLevelKeyboardMessage.WM_KEYUP:
            case LowLevelKeyboardMessage.WM_SYSKEYUP:
                thread_KeyUp((Keys)info.vkCode); break;

            case LowLevelKeyboardMessage.WM_KEYDOWN:
            case LowLevelKeyboardMessage.WM_SYSKEYDOWN:
                thread_KeyDown((Keys)info.vkCode); break;

            default: break;
            }
        }
コード例 #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
        private void lowLevelKeyboardProcHook(LowLevelKeyboardMessage message, KeyboardLowLevelHookStruct info)
        {
            switch (message)
            {
                case LowLevelKeyboardMessage.WM_KEYUP:
                case LowLevelKeyboardMessage.WM_SYSKEYUP:
                    thread_KeyUp((Keys)info.vkCode); break;

                case LowLevelKeyboardMessage.WM_KEYDOWN:
                case LowLevelKeyboardMessage.WM_SYSKEYDOWN:
                    thread_KeyDown((Keys)info.vkCode); break;

                default: break;
            }
        }