public IntPtr SetHook(HookType hookType, NativeAPIs.HookCallbackProc proc) { using (Process curProcess = Process.GetCurrentProcess()) using (ProcessModule curModule = curProcess.MainModule) { return(NativeAPIs.SetWindowsHookEx((int)hookType, proc, NativeAPIs.GetModuleHandle(curModule.ModuleName), 0)); } }
private void Window_Loaded(object sender, RoutedEventArgs e) { nativeService = new NativeService(); procHook = (nCode, wParam, lParam) => { if (nCode >= 0 && wParam == (IntPtr)WMType.KEYDOWN) { int vkCode = Marshal.ReadInt32(lParam); if ( (System.Windows.Forms.Keys)vkCode == System.Windows.Forms.Keys.VolumeDown || (System.Windows.Forms.Keys)vkCode == System.Windows.Forms.Keys.VolumeUp ) { if (this.WindowState == WindowState.Maximized) { this.WindowState = WindowState.Minimized; this.Topmost = false; } else { this.WindowState = WindowState.Maximized; this.Topmost = true; } return(new IntPtr(1)); } } if (this.WindowState == WindowState.Maximized) { if (nCode >= 0 && ( wParam == (IntPtr)WMType.LBUTTONDOWN || wParam == (IntPtr)WMType.LBUTTONUP || wParam == (IntPtr)WMType.MOUSEHOVER || wParam == (IntPtr)WMType.MOUSEMOVE || wParam == (IntPtr)WMType.MOUSEACTIVATE || wParam == (IntPtr)WMType.MOUSELEAVE )) { return(new IntPtr(1)); } } return(NativeAPIs.CallNextHookEx(handleKeyboardHook, nCode, wParam, lParam)); }; handleKeyboardHook = nativeService.SetHook(HookType.WH_KEYBOARD_LL, procHook); handleMouseHook = nativeService.SetHook(HookType.WH_MOUSE_LL, procHook); nativeService.SuppressStandby(); }