Beispiel #1
0
        private static void KeyboardHookHandler(object data)
        {
            if (allHotkeysSuspendCount > 0)
            {
                return;
            }

            lock (keysLocker)
            {
                KeyboardHookData    hookData     = (KeyboardHookData)data;
                KeyboardMessageType keyState     = hookData.keyState;
                KBDLLHOOKSTRUCT     keyboardData = hookData.keyData;

                Keys newKeys         = (Keys)keyboardData.vkCode;
                Keys newModifierKeys = HotkeyUtils.GetModifierKeys(newKeys);

                if (keyState == KeyboardMessageType.WM_KEYDOWN || keyState == KeyboardMessageType.WM_SYSKEYDOWN)
                {
                    pressedModifierKeys |= newModifierKeys;

                    if (newKeys != pressedKey)
                    {
                        pressedKey = newKeys;
                        HandleHotkeys(newModifierKeys == Keys.None ? pressedKey : Keys.None);
                    }
                }
                else if (keyState == KeyboardMessageType.WM_KEYUP || keyState == KeyboardMessageType.WM_SYSKEYUP)
                {
                    pressedKey           = Keys.None;
                    pressedModifierKeys &= ~newModifierKeys;
                }
            }
        }
Beispiel #2
0
 private void KeyP(int wParam, KeyboardHookData lParam)
 {
     if (kh.WinHeld && kh.CtrlHeld)
     {
         if (kh.AltHeld && lParam.vkCode != 115) // Alt, but not F4
         {
             if (lParam.vkCode == 121)           // F10
             {
                 RunPsx();
             }
             else if (lParam.vkCode == 120) // F9
             {
                 WinRun();
             }
             else if (lParam.vkCode == 119) // F8
             {
                 OperaPrivate();
             }
         }
         else if (lParam.vkCode > 48 && lParam.vkCode <= 52 && this.acceptWorkspace.Contains(lParam.vkCode - 49))
         { // 1-4
             MoveToWorkspace(lParam.vkCode - 49);
         }
         else if (lParam.vkCode == 48) // 0
         {
             RunPsx(-2);
         }
         else if (lParam.vkCode == 56) // 8
         {
             RunPsx(0);
         }
         else if (lParam.vkCode > 53 && lParam.vkCode < 58) // 6-9
         {
             RunPsx(lParam.vkCode - 60);
         }
         else if (lParam.vkCode >= 122 && lParam.vkCode <= 123) // F11-F12
         {
             RunPsx(lParam.vkCode - 123);
         }
         else if (lParam.vkCode >= 112 && lParam.vkCode <= 123) // F1-F12
         {
             ChangeBackground(lParam.vkCode - 111);
         }
         else if (lParam.vkCode == 37 && this.acceptWorkspace.Contains(this.idCurrentWorkspace - 1))
         { // Left
             this.idCurrentWorkspace--;
             SetTrayIconN(this.idCurrentWorkspace);
         }
         else if (lParam.vkCode == 39 && this.acceptWorkspace.Contains(this.idCurrentWorkspace + 1))
         { // Right
             this.idCurrentWorkspace++;
             SetTrayIconN(this.idCurrentWorkspace);
         }
     }
 }
Beispiel #3
0
 /// <summary>
 /// Private hook that checks the return code
 /// and calls the overridden hook process <paramref name="hookProc"/>
 /// </summary>
 /// <param name="code">A code the hook procedure uses to determine
 /// how to process the message.</param>
 /// <param name="wParam">The virtual-key code of the key that generated
 /// the keystroke message.</param>
 /// <param name="lParam">The repeat count, scan code, extended-key flag,
 /// context code, previous key-state flag,</param>
 /// <see cref="https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984%28v=vs.85%29.aspx"/>
 /// <returns></returns>
 private int _hookProc(int code, int wParam, ref KeyboardHookData lParam)
 {
     if (code >= 0)
     {
         //Pass on for other objects to process.
         return(this.hookProc(code, wParam, ref lParam));
     }
     else
     {
         return(CallNextHookEx(hhook, code, wParam, ref lParam));
     }
 }
Beispiel #4
0
        /// <summary>
        /// Overridable function called by the hooked procedure
        /// function <typeparamref name="_hookProc"/>.
        /// </summary>
        /// <param name="code">A code the hook procedure uses to determine
        /// how to process the message.</param>
        /// <param name="wParam">The virtual-key code of the key that generated
        /// the keystroke message.</param>
        /// <param name="lParam">The repeat count, scan code, extended-key flag,
        /// context code, previous key-state flag,</param>
        /// <see cref="https://msdn.microsoft.com/en-us/library/windows/desktop/ms644984%28v=vs.85%29.aspx"/>
        /// <returns></returns>
        public virtual int hookProc(
            int code, int wParam, ref KeyboardHookData lParam)
        {
            Keys k = (Keys)lParam.vkCode;

            // Check for shift(s), alt, and ctrl.

            // Shift
            if (k == Keys.LShiftKey)
            {
                bLeftShiftHeld = bShiftHeld = (wParam == WM_KEYDOWN);
            }
            else if (k == Keys.RShiftKey)
            {
                bRightShiftHeld = bShiftHeld = (wParam == WM_KEYDOWN);
            }
            // Control
            if ((lParam.vkCode & 0xA2) == 0xA2 || (lParam.vkCode & 0xA3) == 0xA3)
            {
                bCtrlHeld = (wParam == WM_KEYDOWN);
                //return 1;
            }
            // 164 mean ALT, 165 mean ALT+GR
            if (lParam.vkCode == 164)
            {
                bAltHeld = (wParam == WM_SYSKEYDOWN);
                //return 1;
            }

            //Key Press Event
            KeyEventArgs kea     = new KeyEventArgs(k);
            bool         handled = false;

            if ((wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN) && (KeyDown != null))
            {
                handled = KeyDown(wParam, lParam);
            }
            else if ((wParam == WM_KEYUP || wParam == WM_SYSKEYUP) && (KeyUp != null))
            {
                handled = KeyUp(wParam, lParam);
            }
            if ((kea.Handled) || (handled))
            {
                return(1);
            }

            return(CallNextHookEx(hhook, code, wParam, ref lParam));
        }
Beispiel #5
0
        private bool Kh_KeyDown(int wParam, KeyboardHookData lParam)
        {
            bool keyHandled = false;
            Keys keyData    = (Keys)lParam.vkCode;

            // Testing alt+x key pressed
            if (kh.AltHeld)
            {
                int screenNumKey = -1;
                if (keyData == Keys.D0)
                {
                    keyHandled = true;
                    int nbOfActiveScreen = numberOfActiveBlackScreen(CommonData.dataInstance.BlackWindows);
                    // Showing all black screens if number of screens actually shows is less than half of existing screens
                    if (nbOfActiveScreen <= ((Double)CommonData.dataInstance.BlackWindows.Length / 2))
                    {
                        showAllBlackWindows(CommonData.dataInstance.BlackWindows);
                    }
                    else // Hide all screens
                    if (nbOfActiveScreen > (CommonData.dataInstance.BlackWindows.Length / 2))
                    {
                        hideAllBlackWindows(CommonData.dataInstance.BlackWindows);
                    }
                }
                else
                if (keyData == Keys.D1)
                {
                    screenNumKey = 1;
                    keyHandled   = true;
                }
                else
                if ((keyData == Keys.D2) && (Screen.AllScreens.Length > 1))
                {
                    screenNumKey = 2;
                    keyHandled   = true;
                }
                else
                if (keyData == Keys.D3 && (Screen.AllScreens.Length > 2))
                {
                    screenNumKey = 3;
                    keyHandled   = true;
                }
                else
                if (keyData == Keys.D4 && (Screen.AllScreens.Length > 3))
                {
                    screenNumKey = 4;
                    keyHandled   = true;
                }
                else
                if (keyData == Keys.D5 && (Screen.AllScreens.Length > 4))
                {
                    screenNumKey = 5;
                    keyHandled   = true;
                }
                else
                if (keyData == Keys.D6 && (Screen.AllScreens.Length > 5))
                {
                    screenNumKey = 6;
                    keyHandled   = true;
                }
                // If any valide alt+X key, and screen associated
                if ((screenNumKey > 0) && (screenNumKey <= Screen.AllScreens.Length))
                {
                    if (CommonData.dataInstance.BlackWindows[screenNumKey - 1] == null)
                    { // Creating first time BlackWindows for this screen
                        CommonData.dataInstance.BlackWindows[screenNumKey - 1] = initNewBlackWindow(screenNumKey);
                    }
                    BlackWindow currentBlackWindow = CommonData.dataInstance.BlackWindows[screenNumKey - 1];
                    if (currentBlackWindow.IsVisible)
                    { // Hidding black screen window if already visible
                        hideBlackWindow(currentBlackWindow);
                    }
                    else
                    { // Showing Blackscreen window if not visible
                        showBlackWindow(currentBlackWindow, Screen.AllScreens[screenNumKey - 1], screenNumKey);
                    }
                }
            }
            // If keyHandled == true, current keypressed will not be handled anymore by Windows
            // (in certain cases, let it continue to be handled by Microsoft Windows launch Windows system beep sound each time alt+x key was pressed...)
            return(keyHandled);
        }
Beispiel #6
0
 static extern int CallNextHookEx(IntPtr idHook, int nCode, int wParam, ref KeyboardHookData lParam);