8

レジストリを使用して、アプリケーションを Windows の右クリック メニューに追加しました。

"C://myapp.exe "%1"

MessageBox以下のコードを使用して、選択したファイルのパスを取得できます。

static void Main(string[] args)
{
   foreach (string path in args)
   {
       MessageBox.Show(path);  
   }
}

1 つのファイルを開く場合は問題ありませんが、複数のファイルを選択すると、アプリケーションの複数のインスタンスが実行されます。単一インスタンスのみで選択したすべてのファイルのパスが必要です。誰でもこれを行う方法を教えてもらえますか?

4

5 に答える 5

0

アプリケーションは、それ自体の複数のインスタンスを実行していない可能性が高く、foreach ループに各パスでメッセージ ボックスを表示するように指示したため、単に複数のメッセージ ボックスを取得しています。すべてのパスを含むように文字列を操作し、それらをメッセージボックスに挿入して表示する必要があります。

から

static void Main(string[] args)
{
   foreach (string path in args)
   {
      MessageBox.Show(path);  
   }
}

static void Main(string[] args)
{
  string paths = "";
  foreach (string path in args)
  {
     paths += path + Environment.NewLine;
  }
  MessageBox.Show(path);
}
于 2014-09-26T05:22:58.080 に答える
0

かなり複雑ですが、Shell Extension Handler がこの問題を解決することはわかっています。
.NET 言語で Windows シェル拡張機能を記述する方法

ユーザーが特定のファイルの種類を右クリックすると開く Windows フォーム アプリケーション用にこれらの 1 つを作成しました。複数のファイルに対しても機能します。

幸運を!

于 2013-09-11T19:00:31.653 に答える
0

まず、あなたのアプローチについてお伝えしたい最も重要なことは、レジストリで作成した右クリックのショートカットで複数のファイル パスを取得することは絶対に不可能だということです。ただし、このアプローチにはいくつかの回避策があります。役に立ちます。

  • これが本当に簡単である必要がある場合は、Mutex クラスを使用してアプリケーション インスタンスを処理する必要があります。これは、Mutex を使用してアプリケーション インスタンスを単一に制限できた場合に役立つ場合があります。このメソッドを機能させるには、前のすべてのインスタンスから最後のインスタンスにコマンドライン引数を渡す必要があります。

今説明した方法は、起動時にすべてのファイル パスを取得するために多くのコードを必要としますが、2 番目の簡単な方法はこの状況に最も適していますが、少し難しく、実行可能ファイル以外の何かが必要です。

  • 私が言った 2 番目の (推奨) アプローチは、すべてのファイル パスを取得するためにアプリケーションに追加のコンポーネントを作成する必要があるため、少し注意が必要ですが、すべてのパスを一度に受け取ることができます (複数のインスタンスはありません)。アプローチは、シェル拡張と呼ばれることがあります。このアプローチを説明するために、いくつかの前提条件について説明します (既に知っている場合はスキップしてもかまいません)。シェル拡張機能はCOM サーバーであり、ユーザーのコンピューターに登録され、ユーザーが処理できる特定の種類のファイルを使用します。 cs.csproj (どちらも既定で Visual Studio で開くように登録されています)。シェル拡張機能はコンテキスト メニュー ハンドラーとも呼ばれます。.登録されたシェル拡張またはコンテキストメニュー ハンドラは、Windows エクスプローラのコンテキスト メニューから右クリックを受け取るとすぐに呼び出されます。
    大まかに言えば、シェル拡張機能またはコンテキストメニュー ハンドラーは、ユーザーのコンピューターでダイナミック リンク ライブラリの形式で終了する登録済みの COM サーバーであり、登録済みのファイル タイプが右クリックの選択またはダブル クリックを受け取ると、その関数が呼び出されます。
    これで、シェル拡張に向けて良いスタートを切るのに十分だと思います. これは、まともな出発点の途中までを提供するための、段階的な記事です。

それはあなたのニーズを達成するのに役立つと思います.何か残っている場合はお知らせください.

于 2013-08-31T21:43:15.737 に答える