Example #1
0
        private static void EnsureSubscribedToGlobalMouseEvents()
        {
            // 安装鼠标钩子
            if (s_MouseHookHandle == 0)
            {
                //为了避免GC把它清理干净。
                s_MouseDelegate = MouseHookProc;

                var mo = HookApi.GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName);
                //安装钩子
                s_MouseHookHandle = HookApi.SetWindowsHookEx(
                    HookType.WH_MOUSE_LL,
                    s_MouseDelegate,
                    mo, 0);//Assembly.GetExecutingAssembly().GetModules()[0])
                //如果SetWindowsHookEx函数将失败。
                if (s_MouseHookHandle == 0)
                {
                    //返回由上一个非托管函数使用平台调用称为具有DllImportAttribute.SetLastError标志设置返回的错误代码。
                    int errorCode = Marshal.GetLastWin32Error();

                    //初始化并抛出初始化Win32Exception类的新实例使用指定的错误。
                    throw new Win32Exception(errorCode);
                }
            }
        }
Example #2
0
        private static void EnsureSubscribedToGlobalKeyboardEvents()
        {
            // 安装键盘钩子,只有当它没有安装,必须安装
            if (s_KeyboardHookHandle == 0)
            {
                //var ss = Assembly.GetExecutingAssembly().GetModules();

                var mo = HookApi.GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName);

                //为了避免GC把它清理干净。
                s_KeyboardDelegate = KeyboardHookProc;

                //安装钩子
                s_KeyboardHookHandle = HookApi.SetWindowsHookEx(HookType.WH_KEYBOARD_LL, s_KeyboardDelegate, mo, 0);

                // Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0])

                //如果SetWindowsHookEx函数将失败。
                if (s_KeyboardHookHandle == 0)
                {
                    //返回由上一个非托管函数使用平台调用称为具有DllImportAttribute.SetLastError标志设置返回的错误代码.
                    int errorCode = Marshal.GetLastWin32Error();

                    //初始化并抛出初始化Win32Exception类的新实例使用指定的错误。
                    throw new Win32Exception(errorCode);
                }
            }
        }