Пример #1
0
 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();
        }