• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:最前面に出すが、作業のじゃまにならない方法)

最前面に出すが、作業のじゃまにならない方法

このQ&Aのポイント
  • Win32APIを使用して、最前面に表示する方法についての質問です。
  • 回答者からは、SendMessageを利用して文字入力を行い、SetActiveWindowを使用して最前列にする方法が提案されました。
  • ただし、他の作業を行っている際に邪魔になることや、入力がキーボードと重なってしまうこともあるため、バックグラウンドのまま文字を入力する方法を求めています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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  どちらにしろ、ターゲットのアプリに向かってメッセージを送るかポストするかしないといけないので、本当にメッセージを受け付けないアプリならば、お手上げと言う事になります。

nazotarou
質問者

お礼

DirectInputをちょっと、調べてみようかと思います。 やはり、深い技術が必要そうですね。 アプリの名前もかかなかったのにも関わらず、対応していただいたことは、感謝しています。 ありがとうございました。

関連するQ&A