- PR -

【C#】アクティブでないアプリケーションのFormをアクティブ表示に変更したい

1
投稿者投稿内容
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2006-08-21 11:29
いつもお世話になっております。

C#2003で、『アクティブでないアプリケーションのForm(※MDIではありません)』
をアクティブにする方法を教えてください。

バックグラウンドスレッドでデータを受信した場合に、Form.Invokeを利用して
Form.Actevate()を使用したのですがNGでした。

TopMost=trueでも、前面には表示されますがアクティブにはなりません。
無理なのでしょうか?

MSサイトには、下記のように書いてありますが、
『アクティブでないアプリケーション』では無理なのでしょうか?

http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.form.activate.aspx

〜〜〜下記は、抜粋〜〜〜

アクティブなアプリケーションであるフォームをアクティブにした場合は、
そのフォームが最前面に移動します。アクティブなアプリケーションでは
ないフォームの場合は、そのフォームのウィンドウ キャプションが点滅します。
このメソッドを有効にするには、フォームを表示できる状態にしておく必要があります。
フォームがマルチ ドキュメント インターフェイス (MDI) アプリケーションの
フォームである場合に、アプリケーション内でアクティブなフォームを決定するには、
ActiveForm プロパティまたは ActiveMdiChild プロパティを使用します。

〜〜〜

以上、お忙しいとは思いますが、よろしくお願いいたします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-08-21 12:12
.NET の標準ライブラリでは無理ですので、Win32API の SetForegroundWindow を呼ぶ必要があります。
ただし、ユーザビリティ的に、勝手にフォアグラウンドウィンドウを変更するのは好ましくないという判断から、新しい OS ほど制限が付くようになっています。詳しくは MSDN をご覧ください。
使い方については検索すれば山ほど出てくるでしょう。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-08-21 12:35
引用:

Makotoさんの書き込み (2006-08-21 11:29) より:

C#2003で、『アクティブでないアプリケーションのForm(※MDIではありません)』
をアクティブにする方法を教えてください。
バックグラウンドスレッドでデータを受信した場合に、Form.Invokeを利用して
Form.Actevate()を使用したのですがNGでした。


別プロセスであれば、Windows API 関数を使うほかありません。
最小化などの対応も含めると、ShowWindow 関数 + SetForegroundWindow 関数が使えるでしょう。

引用:

TopMost=trueでも、前面には表示されますがアクティブにはなりません。
無理なのでしょうか?


「ZOrder 順での最前面」 と 「ウィンドウがアクティブ」 はイコールではありません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2006-08-21 18:42
回答ありがとうございます。

やはりWindows APIを使うしかないですか...

後輩が作成しているアプリケーションのため、
現時点では動作報告はできませんが、
pInvokeして呼び出すように助言しておこうと思います。

ちょっと話がそれますが、WinFX(昔の呼称)では、
『WinAPIは呼び出せなくなる(らしい?)』
と聞いたことがありますが、いずれはAPIも呼べなくされちゃったりするんでしょうか?

以上、ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)