トップ回答者
C#でAppActivateを使用して別プロセスのアプリケーションをアクティブに出来ない

質問
-
C#にVBコンポーネントを追加しAppActivateの使用したのですが、タイトルに書いた通りの
現象が起こりました。
実行環境は以下の様になります。
ビルド環境
Windows7
Visual Studio 2008(C#)
実行環境
Vista
当方が行おうとしている処理をまとめると以下の様になります。
1. 自アプリから別アプリを起動する
2. 自アプリから起動した別アプリを前面に表示する
(補足 2.の処理で、常に手前に表示することは意図していない)
この2.の処理を、別アプリをアクティブにすることで実現しようと考え、AppActivateを使用したのですが
アクティブに出来ませんでした。
(補足:AppActivateのパラメータには、対象となる別アプリのプロセスIDを渡しています)
以前(実行環境がXP時)は、SetForegroundWindow関数を使用し2.の処理を実現していました。
Vista移行後、SetForegroundWindow関数が正常に動作しなくなり、この対応としてAppActivateの使用を
考えたのですが、結果は先述した通りです。
また、2.の処理でSetWindowPostを使用する事を考えたのですが、常に手前に表示されてしまい
意図した処理とならないため使用できませんでした。
2.の処理を実現するためにAppActivateをC#で使用する事は不可能でしょうか?
また、AppActivate使用以外に2.の処理を実現する方法をご存知でしたらご教授ください。
よろしくお願い致します。
回答
-
>AppActivate使用以外に2.の処理を実現する方法
以下の方法で試してみてください。
1.SetActiveWindow > SetForegroundWindow
2.AttachThreadInput > SetForegroundWindow
3.AttachThreadInput > SetActiveWindow > SetForegroundWindow
4.AllowSetForegroundWindow > 1. or 2. or 3.
いずれもAPIです。
また、その別アプリがLockSetForegroundWindowでLockしていた場合、
意図したとおりの動作になるか確認が必要です。- 回答としてマーク 菊地俊介 2010年3月8日 9:35
-
AppActivateは、AttachThreadInput(GetForegroundWindowThreadID())してSetForegroundWindowの流れと認識しています。
単独のSetForegroundWindowは、Windows98/2000から無邪気な使用が禁止されているわけですから、Vistaからうまくいかないというなら、昇格したプロセスがフォアグランドになっているとき、昇格していないC#アプリからのAttachThreadInputが弾かれるとかそんな話ではないでしょうか。個人的には、ほかのアプリから、フォアグランドを奪取するような仕様自体、いかがなものか、とおもいます。
jzkey- 回答としてマーク 菊地俊介 2010年3月8日 9:35
すべての返信
-
>AppActivate使用以外に2.の処理を実現する方法
以下の方法で試してみてください。
1.SetActiveWindow > SetForegroundWindow
2.AttachThreadInput > SetForegroundWindow
3.AttachThreadInput > SetActiveWindow > SetForegroundWindow
4.AllowSetForegroundWindow > 1. or 2. or 3.
いずれもAPIです。
また、その別アプリがLockSetForegroundWindowでLockしていた場合、
意図したとおりの動作になるか確認が必要です。- 回答としてマーク 菊地俊介 2010年3月8日 9:35
-
AppActivateは、AttachThreadInput(GetForegroundWindowThreadID())してSetForegroundWindowの流れと認識しています。
単独のSetForegroundWindowは、Windows98/2000から無邪気な使用が禁止されているわけですから、Vistaからうまくいかないというなら、昇格したプロセスがフォアグランドになっているとき、昇格していないC#アプリからのAttachThreadInputが弾かれるとかそんな話ではないでしょうか。個人的には、ほかのアプリから、フォアグランドを奪取するような仕様自体、いかがなものか、とおもいます。
jzkey- 回答としてマーク 菊地俊介 2010年3月8日 9:35