Globaler Hotkey in der Konsolenanwendung

Weiß jemand, wie man die RegisterHotKey / UnregisterHotKey-API-Aufrufe in einer Konsolenanwendung verwendet? Ich gehe davon aus, dass das Einrichten / Entfernen des Hotkeys dasselbe ist, aber wie erhalte ich den Anruf zurück, als die Taste gedrückt wurde?

Jedes Beispiel, das ich sehe, ist für Winforms und verwendetprotected override void WndProc(ref Message m){...}, das steht mir nicht zur Verfügung.

aktualisieren was ich habe ist unten, aber das Ereignis wird nie getroffen. Ich dachte, es könnte daran liegen, dass beim Laden von ConsoleShell die weitere Ausführung blockiert wird, aber selbst wenn ich @ setzSetupHotkey in einem anderen Thread passiert nichts. Irgendwelche Gedanken?

class Program
{
    static void Main(string[] args)
    {
        new Hud().Init(args);
    }
}

class Hud
{
    int keyHookId;


    public void Init(string[] args)
    {
        SetupHotkey();
        InitPowershell(args);
        Cleanup();
    }

    private void Cleanup()
    {
        HotKeyManager.UnregisterHotKey(keyHookId);
    }

    private void SetupHotkey()
    {
        keyHookId = HotKeyManager.RegisterHotKey(Keys.Oemtilde, KeyModifiers.Control);
        HotKeyManager.HotKeyPressed += new EventHandler<HotKeyEventArgs>(HotKeyManager_HotKeyPressed);
    }

    void HotKeyManager_HotKeyPressed(object sender, HotKeyEventArgs e)
    {
        //never executed
        System.IO.File.WriteAllText("c:\\keyPressed.txt", "Hotkey pressed");
    }

    private static void InitPowershell(string[] args)
    {
        var config = RunspaceConfiguration.Create();
        ConsoleShell.Start(config, "", "", args);
    }
}

Antworten auf die Frage(8)

Ihre Antwort auf die Frage