- - PR -
【VB.NET】 別APを最前面に表示させる
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-08-09 10:58
いつも勉強させて頂いてます。
現在、VB.NETで開発を行っています。 A"と"B"というAPが起動している状態で、 "A"のほうであるボタンをクリックしたときに "B"をアクティブにし最前面に表示するようにしたいです。 また、"B"が起動していない場合には"B"を起動するようにしたいのですが どのようにすればよいのでしょうか? どなたかご教授お願い致します。 よろしくお願い致します。 | ||||
|
投稿日時: 2005-08-09 11:19
APってのはアプリケーションのことで良いんですかね。
他のプロセスの情報を取得するにはSystem.Diagnostics.Processクラスを使います。 タイトル文字列が分かっているならProcess.GetProcessesByNameメソッド。 そうでなければProcess.GetProcessesをしてそれぞれのMainModuleプロパティからFileNameやModuleNameで判断します。 他プロセスのウィンドウの操作は現在の.NETではサポートされていないので、Win32APIのSetForegroundWindow関数を使うことになります。 関数に渡すウィンドウハンドルは、通常は前述のメソッドで取得したProcessインスタンスのMainWindowHandleプロパティを使えばいいでしょう。 | ||||
|
投稿日時: 2005-08-09 11:27
こんにちは、じゃんぬ です。
最小化されてることも考慮すると、ShowWindow 関数も合わせておくと良いでしょう。 同一アプリケーションなので、ちょっと例は違いますが... 二重起動をした時に既に起動中のアプリケーションをアクティブにする _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-09 14:04
Hongliangさん、じゃんぬねっとさん
お早い回答ありがとうございます。 あまりの早さにちょっと感動しました。 SetForegroundWindow関数を用いることで何とか解決しました。 本当にありがとうございました。 | ||||
|
投稿日時: 2005-08-10 09:59
度々で申し訳ないのですが・・・。
SetForegroundWindow関数を用いて最前面に持ってくることは出来たのですが、 ターミナルサービス上で複数ユーザーがログインして作業を行うため、 同じアプリケーションが複数起動している状態になっています。 こんな場合にでも、特定のプロセス情報を取得するには どのようにすれば良いのでしょうか? どなたかご存知の方がおりましたら、 ご教授お願いします。 | ||||
|
投稿日時: 2005-08-10 10:39
確実な識別にはプロセス ID しかないです。 ただ今回の場合、その ID がどれなのか結局判らないのですよね。 現状のまま簡単に解決するとなると、 タイトルバーの文字列 + (ログイン ユーザ ID) などにして判断するとか... 後は、情報をプロセスごとに埋め込んでおくしかないでしょうね。 いずれにしても、起動される側の対応は必須です。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-08-10 11:58
Win32APIまみれになりますが、Terminal Service APIを駆使すればなんとかなるんじゃないでしょうか。
適当につらつら考えてみれば、
//ターミナルサービスに詳しくないので実際に可能かは分かりません。 手前みそですがWTSEnumerateSessionsのVB.NETのサンプルです。ちょっといじるだけでWTSEnumerateProcessesに置き換えられます。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=21701&forum=7&2 ここではWTSFreeMemoryが省かれてたりしますのでちょっと注意ですが。 //確認のためにコードを書こうとしたらイマイチしっくり来ず、検索したら過去の自分が普通にコーディングしていたという……もうボケが始まってるのかしら。 | ||||
|
投稿日時: 2005-08-10 14:21
じゃんぬねっとさん、Hongliangさん
ご回答ありがとうございます。
この方法で出来ました!! 本当にありがとうございました。 |
1