Глобальная горячая клавиша в консольном приложении

Кто-нибудь знает, как использовать API-вызовы RegisterHotKey / UnregisterHotKey в консольном приложении? Я предполагаю, что установка / удаление горячей клавиши - это то же самое, но как мне перезвонить, когда клавиша была нажата?

Каждый пример, который я вижу, предназначен для Winforms и используетprotected override void WndProc(ref Message m){...}, который не доступен для меня.

Обновить: то, что у меня есть, ниже, но событие никогда не срабатывает. Я думал, что это может быть потому, что когда вы загружаете ConsoleShell, он блокирует дальнейшее выполнение, но даже если я поставлюSetupHotkey в другую ветку ничего не происходит. Какие-нибудь мысли?

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);
    }
}

Ответы на вопрос(4)

Ваш ответ на вопрос