Переопределение горячих клавиш - PullRequest
0 голосов
/ 10 октября 2008

Сложный вопрос. Ответ, вероятно, нет, если все, что я нашел в «Интертубах», верно, но стоит попробовать. Мне нужно переопределить комбинации Ctrl + Shift + Esc и комбинации Ctrl + Esc . Было бы хорошо иметь возможность переопределить комбинации клавиш Win , но у меня есть хук низкого уровня, который делает это, я только хотел бы, чтобы он мне не понадобился. Если мне удастся полностью заблокировать меню «Пуск» и диспетчер задач с помощью политики, переопределения больше не понадобятся, но я не смог найти правильную политику для этого.

Ответы [ 3 ]

1 голос
/ 11 октября 2008

Вы можете переопределить Ctrl + Esc (я только что попробовал в AutoHotkey, все работает), но не Ctrl + Shift + Esc , не более Ctrl + Alt + Del .

Так что использование политик - это, вероятно, верный путь ... Боюсь, у меня нет опыта в этой области.

0 голосов
/ 09 апреля 2017

В случае, если кто-то приходит сюда в поисках не-AutoHotKey, вот способ c #.

Это можно сделать, используя клавиатуру. Хороший класс ловушек для этого можно найти в этой статье CodeProject

Использование приведенного ниже кода предотвратит возникновение WIN + LEFT или WIN + RIGHT . Вы можете использовать это для переопределения любых клавиш, которые вы хотите.

Это даже отменит горячие клавиши, которые вы добавили через RegisterHotKey Win API.

Когда у вас есть эти классы в вашем проекте, вы можете добавить обработчики к статическому HookManager классу, как показано ниже.

//It's worth noting here that if you subscribe to the Key_Press event then it will break the international accent keys.
HookManager.KeyPress += HookManager_KeyPress;
HookManager.KeyDown += HookManager_KeyDown;
HookManager.KeyUp += HookManager_KeyUp;

Вы также можете добавлять события мыши, но для простоты я просто показываю хук клавиатуры.

Я также создал общий список, чтобы я знал, какие ключи в данный момент недоступны, и удаляю эти ключи из списка в событии KeyUp.

public static List<Keys> keysDown = new List<Keys>();
private static void HookManager_KeyDown(object sender, KeyEventArgs e)
        {
            //Used for overriding the Windows default hotkeys
            if(keysDown.Contains(e.KeyCode) == false)
            {
                keysDown.Add(e.KeyCode);
            }

            if (e.KeyCode == Keys.Right && WIN())
            {
                e.Handled = true;
                //Do what you want when this key combination is pressed
            }
            else if (e.KeyCode == Keys.Left && WIN())
            {
                e.Handled = true;
                //Do what you want when this key combination is pressed
            }

        }

        private static void HookManager_KeyUp(object sender, KeyEventArgs e)
        {
            //Used for overriding the Windows default hotkeys
            while(keysDown.Contains(e.KeyCode))
            {
                keysDown.Remove(e.KeyCode);
            }
        }

        private static void HookManager_KeyPress(object sender, KeyPressEventArgs e)
        {
            //Used for overriding the Windows default hotkeys

        }

        public static bool CTRL()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LControlKey) || 
                keysDown.Contains(Keys.RControlKey) || 
                keysDown.Contains(Keys.Control) || 
                keysDown.Contains(Keys.ControlKey))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool SHIFT()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LShiftKey) || 
                keysDown.Contains(Keys.RShiftKey) ||
                keysDown.Contains(Keys.Shift) ||
                keysDown.Contains(Keys.ShiftKey))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool WIN()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.LWin) || 
                keysDown.Contains(Keys.RWin))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public static bool ALT()
        {
            //return keysDown.Contains(Keys.LShiftKey)
            if (keysDown.Contains(Keys.Alt))
            {
                return true;
            }
            else
            {
                return false;
            }
        }
0 голосов
/ 10 октября 2008

Так что вам нужно переопределить горячие клавиши в вашем приложении? Тогда ответ, вероятно, да, как? Понятия не имею, но если это (http://www.inchwest.com/mapkeyboard.aspx) программа может, то вы можете

...