アプリの空き時間にキー入力を監視する

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

アプリで、キー入力を監視したい。

監視したいが、アプリの起動中、ずっとタイマー回しっぱなしでキー入力を監視し続けるのは、違う気がする。

なにか、良い方法ないか探してみる。

やったこと

メインスレッドの空き時間(Idle時間)を使って、キーを監視してみる。

idle時間は、ComponentDispatcher.ThreadIdleイベントを使う。

キー入力は、Keyboard.IsKeyDown()を使う。

サンプルコード

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    ComponentDispatcher.ThreadIdle += new System.EventHandler(ComponentDispatcher_ThreadIdle);
}
void ComponentDispatcher_ThreadIdle(object sender, EventArgs e)
{
    if (Keyboard.IsKeyDown(Key.A))
    {
        Debug.WriteLine("Aキーがクリックされました");
    }
}

参考

Getting inactivity/idle time in a WPF application

https://stackoverflow.com/questions/1111615/getting-inactivity-idle-time-in-a-wpf-application