DOBON.NET DOBON.NETプログラミング掲示板過去ログ

タスクバーに表示されるアプリをアクティブにしたい

環境/言語:[VB.NEW .NET framework2.0 WindowsXP]
分類:[.NET]

タスクバーに表示されているアプリを、必要な物だけ選択し、設定時間ごとに
アクティブ状態に切り替える、というソフトを作ることになりました。
たとえばExcelと電卓がタスクバーに表示されているような状態であれば
プロセスを取得してアクティブにしたいプロセスにアクティブにするという命令を
してやればよい、ということが情報としてあるのですが、今回はそれにくわえて
独自で作成したアプリ、かつ一つのプロセスで複数の画面のインスタンスを作成、
showメソッドで表示しているような物も対象にしないといけないのです。

その場合プロセスを取得しても、画面が複数なのに対象のプロセスは一つ、
ということになりうまくいきません。
また、そのような事例に需要がないのか検索してもこれだと思う情報が見あたりませんでした。
タスクバーには表示した二つの画面がそれぞれ表示されているような状態なので、
その情報が取得できればあるいは、と思うのですが方法がわかりません。

説明がわかりにくいかもしれませんが、何かヒントでも結構ですので教えていただければ
幸いです。
> たとえばExcelと電卓がタスクバーに表示されているような状態であれば
> プロセスを取得してアクティブにしたいプロセスにアクティブにするという命令を
> してやればよい

例えば、電卓が2つ起動されている時はどうするんでしょう?

> その場合プロセスを取得しても、画面が複数なのに対象のプロセスは一つ、
> ということになりうまくいきません。

どういう動きを実現したくて、どの辺がうまくいきませんか?

要件・仕様を明確にしてください。
■No16740に返信(渋木宏明(ひどり)さんの記事)
> どういう動きを実現したくて、どの辺がうまくいきませんか?
> 要件・仕様を明確にしてください。

失礼しました。
要件・仕様としては
起動されている画面を持つアプリ(最小化されている物も含む)を一覧化し、必要な物だけを選択した上で、選択されたアプリケーションを設定時間ごとにアクティブにする。
イメージとしてはタスクバーに表示されているアイコンを、順にクリックしていってアクティブにするような感じです。
この際、たとえば電卓が二つ起動しているような場合でも、両方を対象にします。

調べてやってみたのですが、プロセスを取得し、特定のプロセスをアクティブにする、ということはSystem.Diagnostics.Process クラスの GetProcessesを利用することで出来ましたが、
一つのメニューから複数画面が起動している(プロセスは一つ)のような場合に、画面1、画面2それぞれを取得し、アクティブにするという方法がわかりませんでした。

そこでタスクバーには表示されているのだから、その情報が取れればうまくいくのでは?と思ったのですがその方法がわからない、というところでつまってしまっています。

うまく伝わっているでしょうか?
■No16756に返信(赤樹将さんの記事)
> そこでタスクバーには表示されているのだから、その情報が取れればうまくいくのでは?と思ったのですがその方法がわからない、というところでつまってしまっています。
>
> うまく伝わっているでしょうか?

拝見した内容では,「〜な感じなのを作りたい」という感じで,そこまで厳密に仕様が決まっているわけでもなさそうですね.
タスクバーはタスクバーで意図的に登録しないこともできますので,「(なんとなく)タスクバーみたいに」と「タスクバーと全く同じに」では話が異なり,実現方法や回答が変わってくるかと思います.

もしタスクバーに拘らないのであれば,例えば以下に Alt+Tab でカスタムなウィンドウ選択を行うアプリケーションサンプルが公開されています.(Windows XP 以降でないと動きませんけど)
http://www.microsoft.com/japan/msdn/windows/windowsxp/xpvisualstyles.asp
もしこれと全く同じで良いということであれば,話は単に C++ から VB への移植になって,かなり具体的に議論ができるかとは思いますが.
■No16757に返信(NyaRuRuさんの記事)
参考になるリンクをありがとうございました。
結局リンクにもあったEnumWindowsを使って画面のハンドルを取得し、対象画面をアクティブにすることで解決しました。
仕様自体が決まってない、というのはその通りで、こんな感じなら出来ます、というのを作成した後、色々とこういう事は?と要望を追加されているような状態です(^^;)

APIを使うことがほとんど初めてに近い状態でしたので、苦労していますが何とかなりそうです。
アクティブにならないパターン(仕様?)があるようですので、その部分の解決がまだ出来ていないのですが、頑張って解決してみます。

お二方ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板