Exemplo n.º 1
0
        private void OnGlobalKeyPressed(object sender, GlobalKeyboardHookEventArgs e)
        {
            Console.WriteLine(e.KeyboardData.VirtualCode + "(" + KeyInterop.KeyFromVirtualKey(e.KeyboardData.VirtualCode).ToString() +
                              ")  state:" + e.KeyboardState + "  flag:" + e.KeyboardData.Flags.ToString("X4"));

            Key key = KeyInterop.KeyFromVirtualKey(e.KeyboardData.VirtualCode);

            bool isKeyDown = (e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyDown || e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyDown);
            bool isKeyUp   = (e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyUp || e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyUp);

            bool isFlag0, isFlag1;
            Key  key0 = CvtStringToKey(Properties.Settings.Default.GlobalHotkey0, out isFlag0);
            Key  key1 = CvtStringToKey(Properties.Settings.Default.GlobalHotkey1, out isFlag1);

            bool isHit = true;

            if (isFlag0)
            {
                if (key0 == Key.LWin || key0 == Key.RWin)
                {
                    isHit &= mIsKeyWinDown;
                }
                if (key0 == Key.LeftCtrl || key0 == Key.RightCtrl)
                {
                    isHit &= mIsKeyCtrlDown;
                }
                if (key0 == Key.LeftAlt || key0 == Key.RightAlt)
                {
                    isHit &= mIsKeyAltDown;
                }
                if (key0 == Key.LeftShift || key0 == Key.RightShift)
                {
                    isHit &= mIsKeyShiftDown;
                }

                isHit &= (key1 == key) && isKeyDown;

                if (isHit && mHitState == 0)
                {
                    mHitState = 2;
                }
            }
            else
            {
                isHit &= (key0 == key) && isKeyUp;
                if (isHit)
                {
                    mHitState = 2;
                }
            }

            if (key == Key.LWin || key == Key.RWin)
            {
                if (mIsKeyWinDown && mHitState == 1 && isKeyUp)
                {
                    mHitState = 2;
                }
                mIsKeyWinDown = isKeyDown;
            }
            if (key == Key.LeftCtrl || key == Key.RightCtrl)
            {
                if (mIsKeyCtrlDown && mHitState == 1 && isKeyUp)
                {
                    mHitState = 2;
                }
                mIsKeyCtrlDown = isKeyDown;
            }
            if (key == Key.LeftAlt || key == Key.RightAlt)
            {
                if (mIsKeyAltDown && mHitState == 1 && isKeyUp)
                {
                    mHitState = 2;
                }
                mIsKeyAltDown = isKeyDown;
            }
            if (key == Key.LeftShift || key == Key.RightShift)
            {
                mIsKeyShiftDown = isKeyDown;
            }


            Console.WriteLine("Hit " + mHitState + "(" + mIsKeyAltDown + ") keyup " + isKeyUp + "  " + key0 + "+" + key1 + "  Cur " + key + "  alt:" + mIsKeyAltDown + " ctrl:" + mIsKeyCtrlDown + " shf:" + mIsKeyShiftDown + " win:" + mIsKeyWinDown);

            if (mHitState == 2)
            {
                new Thread(() => {
                    if (Properties.Settings.Default.GlobalDelay > 0)
                    {
                        Thread.Sleep(Properties.Settings.Default.GlobalDelay);
                    }
                    Dispatcher.BeginInvoke(new Action(() =>
                    {
                        ShowCalc();
                    }));
                }).Start();

                e.Handled = true;
                mHitState = 0;
            }

            //if (e.KeyboardData.VirtualCode != GlobalKeyboardHook.VkSnapshot)
            //    return;

            // seems, not needed in the life.
            //if (e.KeyboardState == GlobalKeyboardHook.KeyboardState.SysKeyDown &&
            //    e.KeyboardData.Flags == GlobalKeyboardHook.LlkhfAltdown)
            //{
            //    MessageBox.Show("Alt + Print Screen");
            //    e.Handled = true;
            //}
            //else

            //if (e.KeyboardState == GlobalKeyboardHook.KeyboardState.KeyDown)
            //{
            //    MessageBox.Show("Print Screen");
            //    e.Handled = true;
            //}
        }