- ベストアンサー
最前面に出すが、作業のじゃまにならない方法
- Win32APIを使用して、最前面に表示する方法についての質問です。
- 回答者からは、SendMessageを利用して文字入力を行い、SetActiveWindowを使用して最前列にする方法が提案されました。
- ただし、他の作業を行っている際に邪魔になることや、入力がキーボードと重なってしまうこともあるため、バックグラウンドのまま文字を入力する方法を求めています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 keybd_event関数の入力を受け付けていると言う事は、少なくともDirectInputにて入力を拾っている訳ではなさそうです。 http://oshiete1.goo.ne.jp/qa810764.html 中にはWM_KEYUPにて反応するアプリもあるので、WM_KEYDOWN→WM_KEYUPを順番にポストして見ては如何でしょう。 バックグラウンドの対象ウィンドウに対してキーを押下げる方法は、当方の経験談で言えば、 ・SetWindowHookEx()によるローレベルキーボードフック(WH_KEYBOARD_LL) http://msdn.microsoft.com/ja-jp/library/cc430103.aspx ・DirectInputとスレッドによる定期的なキーボード入力の確認 http://msdn.microsoft.com/ja-jp/library/cc351697.aspx 辺りです。 前者はグローバルフックです。グローバルフックには別途DLLが必要ですが、ローレベル「キーボード/マウス」フックに関してはDLLを必要としていないので、手間要らずで単純です。 フックプロシージャ内で、ターゲットのアプリに向かってWM_KEYDOWN→WM_KEYUPの順番にメッセージをポストします。 DirectInputに関してはコールバックでは無い為、自前で定期的にキーボード入力の確認をしなければいけません。 定期的な監視にはスレッドを使用する以外に、WM_TIMERやtimeSetEvent()の様な簡単なタイマーコールバックでも構いません。 入力を検出したら、前者と同じくターゲットのアプリに向かってWM_KEYDOWN→WM_KEYUPの順番にメッセージをポストします。 又、DirectInputデバイスを作成する際の協調モードは、DISCL_NONEXCLUSIVEとDISCL_BACKGROUNDの組み合わせにします。 http://msdn.microsoft.com/ja-jp/library/cc351722.aspx どちらにしろ、ターゲットのアプリに向かってメッセージを送るかポストするかしないといけないので、本当にメッセージを受け付けないアプリならば、お手上げと言う事になります。
お礼
DirectInputをちょっと、調べてみようかと思います。 やはり、深い技術が必要そうですね。 アプリの名前もかかなかったのにも関わらず、対応していただいたことは、感謝しています。 ありがとうございました。