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); } } }
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); } } }