- - PR -
【C#】アクティブでないアプリケーションのFormをアクティブ表示に変更したい
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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 プロパティを使用します。 〜〜〜 以上、お忙しいとは思いますが、よろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-08-21 12:12
.NET の標準ライブラリでは無理ですので、Win32API の SetForegroundWindow を呼ぶ必要があります。
ただし、ユーザビリティ的に、勝手にフォアグラウンドウィンドウを変更するのは好ましくないという判断から、新しい OS ほど制限が付くようになっています。詳しくは MSDN をご覧ください。 使い方については検索すれば山ほど出てくるでしょう。 | ||||||||
|
投稿日時: 2006-08-21 12:35
別プロセスであれば、Windows API 関数を使うほかありません。 最小化などの対応も含めると、ShowWindow 関数 + SetForegroundWindow 関数が使えるでしょう。
「ZOrder 順での最前面」 と 「ウィンドウがアクティブ」 はイコールではありません。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||||||
|
投稿日時: 2006-08-21 18:42
回答ありがとうございます。
やはりWindows APIを使うしかないですか... 後輩が作成しているアプリケーションのため、 現時点では動作報告はできませんが、 pInvokeして呼び出すように助言しておこうと思います。 ちょっと話がそれますが、WinFX(昔の呼称)では、 『WinAPIは呼び出せなくなる(らしい?)』 と聞いたことがありますが、いずれはAPIも呼べなくされちゃったりするんでしょうか? 以上、ありがとうございました。 |
1