7

Windowsフォームに質問があることは知っていますが、コンソールで機能しないか、少なくとも機能させることができませんでした。コンソールにフォーカスがないのに、キーの押下をキャプチャする必要があります。

4

1 に答える 1

15

コンソールアプリケーションでグローバルキーボードフックを作成することもできます。

完全に機能するコードは次のとおりです:
https ://docs.microsoft.com/en-us/archive/blogs/toub/low-level-keyboard-hook-in-c

コンソールアプリケーションを作成しますが、これを機能させるには、 System.Windows.Formsへの参照を追加する必要があります。コンソールアプリがそのdllを参照できない理由はありません。

このコードを使用してコンソールアプリを作成し、コンソールアプリにフォーカスがあるかどうかに関係なく、各キーが押されることを確認しました。

編集

メインスレッドは、アプリケーションが終了するまで、たとえばApplication.Exit()の呼び出しを介して、Application.Run()を実行します。他の作業を行う最も簡単な方法は、その作業を実行するために新しいタスクを開始することです。これを行うリンクされたコードからのMain()の修正バージョンは次のとおりです

public static void Main()
{
    var doWork = Task.Run(() =>
        {
            for (int i = 0; i < 20; i++)
            {
                Console.WriteLine(i);
                Thread.Sleep(1000);
            }
            Application.Exit(); // Quick exit for demonstration only.  
        });

    _hookID = SetHook(_proc);

    Application.Run();

    UnhookWindowsHookEx(_hookID);
}

ノート

特定のニーズに応じて特別なキーコンボが押された場合など、コンソールアプリを終了する手段を提供する可能性があります。の中に

于 2012-06-11T22:16:59.040 に答える