msdnに関するこの記事によると、特定のウィンドウをフォアグラウンドウィンドウとして設定し、それにキーストロークを送信することは可能です...しかし、ユーザーが何をしていてもできるように、バックグラウンドのウィンドウにキーストロークを送信する必要があります中断することなく続行します。
4 に答える
フォアグラウンド ウィンドウでキーストロークをキャッチし、バックグラウンド ウィンドウ (デリゲート) に渡す必要があるかもしれません。または、多少複雑な場合は、グローバル ホットキーを使用できます。とにかく、前景フォームから背景フォームにキーを渡すことは、より良い解決策です。
ホットキーに関するものではない良い例を見つけましたが、その概念はあなたの場合にも当てはまるはずです。
http://www.codeproject.com/KB/cs/pass_data_between_forms.aspx
私が Windows Mobile/CE で使用した手法は、キーボードをフックし、それ PostMessage()
をターゲット ウィンドウに送信して通常どおり処理するというものです。この手法はデスクトップでも機能するはずです。Code Project には、キーボードをフックするいくつかの例があります - http://www.codeproject.com/KB/system/globalsystemhook.aspx。前景ウィンドウがアプリケーションの一部であるかどうか、あなたの質問は明確ではありませんでした。そうであれば、バックグラウンド フォームからフォアグラウンド フォームのキー イベントの 1 つにサブスクライブするだけではないでしょうか。
つまり、基本的にはキーストローク リスナーですか? Java には、キーストロークをリッスンしてアクションを実行できるロボット クラスがあります (たとえば、「Hello World」と入力すると、クラスはそれをファイルまたは他のウィンドウに自動的に書き込みます)。
過去に似たようなものを作ったことがあります。一定の while ループでバックグラウンドで実行し、キーストロークをリッスンするだけの Java プログラムを作成できます。各キーストロークをファイルまたは特定の場所に書き込むようにプログラムを設定します。これは短い while ループで、キーが押されたときにのみ反応するため、処理能力をほとんど消費せず、フォアグラウンドでのプログラムのパフォーマンスに影響を与えません。
私はショートカットキーでこれを行います。横に複数の子ウィンドウを持つアプリケーションがあります。メイン ウィンドウは、子ウィンドウのForm.KeyPreviewプロパティを有効にし、その子ウィンドウで適切なイベント (KeyPress、KeyDown、または KeyUp) を登録します。この設定により、メイン ウィンドウは子ウィンドウからのすべてのキーを処理できます。