如何在C#中设置系统范围内的HotKey

时间:2010-02-03 19:18:35

标签: c# .net windows .net-3.5 keyhook

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 个答案:

答案 0 :(得分:3)

您需要查看RegisterHotKey中的 user32.dll 。在pinvoke.net上有一个很好的例子, RegisterHotKey (user32)

答案 1 :(得分:0)

我认为您需要设置系统挂钩...

以下是一个示例:http://www.axino.net/tutorial/2009/02/keylogger-in-c-introduction