2

In AutoIt v3 there's a function called HotKeySet. It sets a hotkey that calls a user function when pressed. It's a system wide hotkey, meaning that the key can't be used for anything else when the hotkey is set.

Basically, I would like to catch Esc or any other key like $, `, etc. and when the user presses it anywhere, even outside of the application, it should let me know.

For example, I would do like HotKeySet({ESC}) inside a loop and when it's done, the program would wait for that key to be pressed before.

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
        }
    }
}
Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
MadBoy
  • 10,824
  • 24
  • 95
  • 156

2 Answers2

4

You need to take a look at RegisterHotKey in user32.dll. There a good example at pinvoke.net, RegisterHotKey (user32).

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
JohnForDummies
  • 950
  • 4
  • 6
0

I think you need to setup a system hook...

Here is an example: http://www.axino.net/tutorial/2009/02/keylogger-in-c-introduction

m0sa
  • 10,712
  • 4
  • 44
  • 91
  • I've seen that link. It doesn't seem to block the input but just logs what you type. So If you lets say have app that requires you to act on pressing 'y' and you are in Word typing, then when you press y it will actually be put in Word document. I would like to have system wide HotKey that takes away the option to use that key for anything else (for the time it's set of course). – MadBoy Feb 05 '10 at 10:15