7

「閉じた」ときにシステムトレイ(顧客の要件)に最小化する小さなWPFアプリを作成しました。ダブルクリックすると元に戻ります。右クリックすると、コンテキストメニューが表示されて終了します。

ただし、アプリが最小化されていて、ユーザーが[スタート]->[すべてのプログラム]->[アプリケーション]に移動すると、新しいインスタンスが起動します。

ユーザーが新しいインスタンスを起動するのではなく、実行中のインスタンスを最大化するようにアプリを取得するには、(C#で)何をする必要がありますか?

ありがとう!

4

1 に答える 1

7

Jon Skeetからのこの回答では、ミューテックスを使用してそれを行う方法について説明しています。

ミューテックスは行く方法です。プロセス名などを使用するよりもはるかに脆弱ではありません。

ただし、Mutexがガベージコレクションされていないことを確認する必要があります。サービス(完了するまで実行される「メイン」メソッドを持つのではなく、イベント駆動型)の場合、これを行う最も賢明な方法は、おそらく静的変数に入れることです。

サービスが停止したときにミューテックスを破棄するので、ファイナライズなどを待つ必要はありません。

Matthew Brindleyは、彼の答えについて同じ質問でこの例を示しています

[STAThread]
static void Main() 
{
   using(Mutex mutex = new Mutex(false, "Global\\" + appGuid))
   {
      if(!mutex.WaitOne(0, false))
      {
         MessageBox.Show("Instance already running");
         return;
      }

      Application.Run(new Form1());
   }
}

他のアプリケーションを最大化するには、最大化するメッセージを送信する必要があります。メッセージ送信に関するこの記事を参照してください

于 2011-01-06T04:46:51.023 に答える