Как установить HotKey для всей системы в C # - PullRequest
2 голосов
/ 03 февраля 2010

В AutoIt v3 есть функция с именем HotKeySet . Он устанавливает горячую клавишу, которая вызывает пользовательскую функцию при нажатии. Это системная горячая клавиша, означающая, что клавиша не может использоваться ни для чего другого, когда горячая клавиша установлена.

По сути, я хотел бы поймать Esc или любую другую клавишу, например $, ` и т. Д., И когда пользователь нажимает ее где-нибудь, даже вне приложения, он должен позволить мне знаю.

Например, я бы хотел, чтобы HotKeySet ({ESC}) внутри цикла, и когда это будет сделано, программа будет ожидать нажатия этой клавиши раньше.

public static void work() {
    while (true) {
        string task = null;
        lock (locker)
            if (tasks.Count > 0) {
                task = tasks.Dequeue();
                if (task == null) {
                    return;
                }
            }
        if (task != null) {
            //MessageBox.Show("Performing task: " + task);
            Program.mainAnnounceWindow.setLogTextBox(task);
            Program.mainAnnounceWindow.setLogTrayTip(task);
            Program.windowStateChange("Show");

            // Set the hotkey here
            SetHotkey(`);

            //Wait for hotkey to press when it's pressed... Execute some stuff
            Thread.Sleep(5000); // Simulate work...
            Program.windowStateChange("Hide");
        }
        else {
            wh.WaitOne(); // No more tasks - wait for a signal
        }
    }
}

Ответы [ 2 ]

3 голосов
/ 09 февраля 2010

Вам нужно взглянуть на RegisterHotKey в user32.dll . Вот хороший пример на pinvoke.net, RegisterHotKey (user32) .

0 голосов
/ 05 февраля 2010

Я думаю, вам нужно настроить системный хук ...

Вот пример: http://www.axino.net/tutorial/2009/02/keylogger-in-c-introduction

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...