グローバル ホットキーを登録するための C# API を作成する必要があります。WM_HOTKEY メッセージを受信するには、 を使用し、 を使用しSystem.Windows.Forms.NativeWindow
て独自のメッセージ ループを実行しますSystem.Windows.Forms.Application.Run(ApplicationContext)
。ユーザーがホットキーを登録したい場合、RegisterHotkey()
でメッセージ ループを停止し、 (P/Invoke) 関数でホットキーを登録して、メッセージ ループを再開System.Windows.Forms.ApplicationContext.ExitThread()
するというメソッドを実行する必要があります。ウィンドウを作成したのと同じスレッド内で呼び出す必要があり、メッセージ ループを実行する同じスレッド内で再度インスタンス化する必要があるRegisterHotKey()
ため、これが必要です。RegisterHotKey()
問題は、ユーザーがRegisterHotkey()
メッセージ ループを実行しているスレッドを開始した直後にメソッドを呼び出すと、そのApplicationContext.ExitThread()
前に呼び出されるApplication.Run(ApplicationContext)
ため、アプリケーションが無期限にブロックされることです。メッセージループが開始されるのを待つためのアプローチを知っている人はいますか?
前もって感謝します!