多重起動時に起動済みウィンドウを前面表示
- 題名: 多重起動時に起動済みウィンドウを前面表示
- 著者: DD.
- 日時: 2012/01/27 22:33:36
- ID: 29698
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 多重起動時に起動済みウィンドウを前面表示
- 著者: Hongliang
- 日時: 2012/01/28 10:24:37
- ID: 29699
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 多重起動時に起動済みウィンドウを前面表示
- 著者: オショウ
- 日時: 2012/01/28 15:45:30
- ID: 29701
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 多重起動時に起動済みウィンドウを前面表示
- 著者: DD.
- 日時: 2012/01/28 22:25:25
- ID: 29703
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: 多重起動時に起動済みウィンドウを前面表示
- 著者: DD.
- 日時: 2012/01/28 22:44:38
- ID: 29706
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[4]: 多重起動時に起動済みウィンドウを前面表示
- 著者: オショウ
- 日時: 2012/01/29 0:53:21
- ID: 29707
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[5]: 多重起動時に起動済みウィンドウを前面表示
- 著者: DD.
- 日時: 2012/02/01 0:15:30
- ID: 29731
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[6]: 多重起動時に起動済みウィンドウを前面表示
- 著者: オショウ
- 日時: 2012/02/01 9:38:28
- ID: 29732
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[7]: 多重起動時に起動済みウィンドウを前面表示
- 著者: DD.
- 日時: 2012/02/01 23:56:40
- ID: 29740
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[8]: 多重起動時に起動済みウィンドウを前面表示
- 著者: DD.
- 日時: 2012/02/04 10:43:06
- ID: 29759
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
DD.と申します。
タイトルの通り、多重起動時に起動済みウィンドウを前面表示したいと考えたのですがうまくいかず質問させて頂きました。
C# .Net3.5にてWindowsフォームアプリで作成を行っているのですが、複数フォームが遷移し、遷移した後、元フォームはVisible=falseされ非表示となります。なのでユーザから見えているのは現在アクティブとなっている1画面のみとなります。
調べてみるとProcess.GetProcessesByName()で該当アプリへのProcessクラスを取得して、SetForegroundWindow(Process.MainWindowHandle)で前面表示するサンプルが多々見受けられますが、「Process.MainWindowHandle は ShowInTaskbar が無効だとゼロを返す」という記事もあり、確かに画面遷移によりメインウィンドウがVisible=falseされるとMainWindowHandleが0になっていました。
これを受け、EnumWindows()にてAPIで列挙して取得しろと書かれている記事もありますが、例えばプロセスIDで該当プロセスを検索して見つかったプロセスのウィンドウハンドルでSetForegroundWindow()しようとしても、該当プロセスにはVisible=falseになっているだけで複数のフォームが存在している状態なので、同プロセスIDを持つウィンドウハンドルが複数取得できてしまい、どれが現在アクティブとなっているものなのかがわかりません。(また、当然ながらその時にどの画面がアクティブなのかも変わってくる)
これをうまく特定する方法があればご教授頂きたいのが1点目で、2点目として、
上記理由に伴い、同プロセスIDを持つウィンドウハンドルに対して全てSetForegroundWindow()を行ってみました。(Visible=falseとなっているものは非表示のため前面表示など関係なし)
すると、「GDI+ Window」というものがタスクバーに出現しプロセスを終了するまで消えない状態となります。「GDI+ Window」を検索しても有力な記事を見つけることができませんでした。(驚速XPがなんたらという記事がありますが、使用していません)
なんらかのアプローチにより、1点目の問題が解決したとしても、この2点目自体も非常に気になっており、ここで出現している「GDI+ Window」とは何者なのか?また、同プロセスIDを列挙する中から「GDI+ Window」だけを特定することは可能なのでしょうか?(できればウィンドウタイトルで判別する以外のアプローチ)
まったく別のアプローチからの解決策でも、ぜひご教授頂きたいのですが、上記疑問も解消できればうれしいと思っていますので、各々ご回答頂ければと思います。