5

コンピューターで MP3 ファイルを作成して、メディア プレーヤーに関連付けました。そのため、エクスプローラーで MP3 ファイルをダブルクリックすると、明らかにメディア プレーヤーが起動して再生されます。

私の問題 は、複数のインスタンスがポップアップするのを防ぐことができますが、新しいインスタンスのファイルパスを、既に使用しているインスタンスに転送するにはどうすればよいですか?

私がしたいこと: 私は曲をダブルクリックします...そしてそれを聞いています 別の曲をダブルクリックすると、現在の曲は停止し、アプリケーションの新しいインスタンスをポップアップすることなく、新しい曲の再生が開始されます。

Mutex を使用して、実行中のインスタンスが既に存在するかどうかを確認します。ファイルパスを取得するには、 Environment.GetCommandLineArgs() を使用します

必要なのは、ファイルのパスを現在のインスタンスに渡すことだけです。これどうやってするの??

4

3 に答える 3

3

基本的に、これをアプリケーションに組み込む必要があります。

ユーザーが 2 番目の曲をクリックすると、現在のインスタンスがアプリケーションの前のインスタンスを強制終了するか、メッセージを送信する何らかの方法が必要になります。

これらは私には少し汚れているようです。

app_booter.exeクリーンなアプローチは、メディア ファイルに関連付けられた小さなファイルを作成することだと思います。メディア ファイルをクリックすると、次の _app_booter_ が開始されます。

  1. アプリケーションの実行中のインスタンスを探します。
  2. それにデータを送信して現在の曲を停止し、この新しい曲を再生します。
  3. アプリが実行されていない場合は、コマンド ラインの曲で起動するだけです。

この別の exe からアプリケーション データを送信するには、IPC: Interprocess communication for Windows in C# (.NET 2.0) を参照してください。

上記の投稿で言及されているアプローチ、または tcp ソケットで十分だと思いWM_COPYDATAます。データは非常に単純で、ファイルパスとおそらくコマンドだけだからです。

以前のインスタンスと対話するようにアプリをビルドするよりも、2 つの別個の exe を保持する方が簡単でクリーンになると思います。

于 2012-11-13T13:25:35.740 に答える
2

これを探していると思いますhttp://wpfinstanceawareapp.codeplex.com/

コマンド ライン引数を最初のインスタンスに渡すことができる単一インスタンス アプリケーションの機能を提供します。

于 2012-11-13T13:23:04.783 に答える
0

Mainミューテックスを確認した後、引数から曲を取得し、イベントを発生Play(FileInfo filename)させて曲を再生します。フォームはこのイベントを処理する必要があります (または、より適切なコントローラー クラス)。

于 2012-11-13T13:23:37.510 に答える