- ベストアンサー
指定したアプリケーションを処理が通るときだけモニターの画面の最前面に出したい
お世話になります。 C++6.0 MFCで開発しております。 今、 (1)A.exeのボタンを押すとB.exeを起動(A.exeの上にB.exeが表示) (2)B.exeが終了するとA.exeに終了通知をして、A.exeに処理を戻す。 (A.exeを最前面に表示する) (3)再度A.exeのボタンを押す。 →(1)のときは、A.exeの上にB.exeが表示されていたのに、A.exeの下にB.exeが表示される (2)のA.exeに処理を戻した後、A.exeが最前面に出るように SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE|SWP_NOMOVE) を実行しています。 (1)、(3)のA.exeのボタンを押すと、A.exeの上にB.exeが表示され、 (2)の時に、A.exeが他のアプリケーションを含めて、最前面、モニターの最前面に表示されるようにしたいのです。 お手数ですがなにとぞよろしくお願いします。 以上よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
A.EXEからB.EXEを起動するときに SetWindowPos( hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE ); を実行してから B.EXEを実行してみましょう B.EXEで A.EXEをHWND_TOPMOST指定でアクティブ化されていて これを解除することなく 2回目のB.EXEの起動を行うので質問のような現象になります SetForgroundWindow/AttachThreadInputなどを使う方法もありますよ
その他の回答 (2)
- m-take0220
- ベストアンサー率60% (477/782)
HWND_TOPMOSTは最前面に出すのではなく、最前面を維持する(タスクマネージャのように、他のウィンドウに隠されないようにする)ための指定です。なので、B.exeの画面が後ろに行ってしまうのでしょう。 HWND_TOPではうまくいきませんか? うまくいかない場合、AllowSetForegroundWindowで許可を与えた上で、SetForegroundWindowを使ってみてください。 SetForegroundWindow http://msdn.microsoft.com/ja-jp/library/cc411039.aspx
お礼
ご返事ありがとうございます。 >HWND_TOPではうまくいきませんか? うまくいかないのです。。。 >うまくいかない場合、AllowSetForegroundWindowで許可を与えた上で、SetForegroundWindowを使ってみてください。 ありがとうございます。試して見ます
最前面に表示すると言うAPIがあるのでソレを使ってみたらどうでしょうか? (ごめんなさい関数名は思い出せません) 後、処理対象はウィンドウハンドルで指定するので、 他アプリは対象アプリのウィンドウハンドルを取得する必要があります。
お礼
ご返事ありがとうございます。 >最前面に表示すると言うAPIがあるのでソレを使ってみたらどうでしょうか? 私ももしや、1行ぐらいで、このアプリの画面を前面に出せ!!見たいな命令があるのかなとおもっていたのですが、うまくいかないのです。。。。 がんばってみます!!ありがとうございます。
お礼
ご返事ありがとうございます。 >SetForgroundWindow/AttachThreadInputなどを使う方法もありますよ 調べてがんばってみます!!! ありがとうございます。