5

エクスプローラーの右クリックメニューを使用してファイルを開くときに機能するプログラムがあります。しかし、複数のファイルを選択して右クリックして自分のプログラムで開くと、複数のファイルを単一のインスタンスに引数として渡すだけでなく、プログラムの複数のインスタンスが開きます。プログラムは vb.net で記述されていますが、Windows フォームではなく、単なるモジュールであるため、Visual Studio のプロパティで [単一インスタンス] オプションにチェックを入れることができます。

では、単一のインスタンスでエクスプローラーのコンテキスト メニューから複数のファイルを開くにはどうすればよいでしょうか。

4

3 に答える 3

8

ここで満足のいく答えはありません。Windows エクスプローラーでは、選択したすべてのファイルを渡してプログラムを開始する簡単な方法が提供されていません。これにはシェル コンテキスト メニュー ハンドラが必要です。マネージ コードで記述するのは非常に困難です。そして.NET 4.0までは安全に書けませんでした。

それでも、VB.NET で利用可能なアプリケーション フレームワークを使用してシミュレートし、アプリをシングルトンにしてStartupNextInstance イベントを実装するのは簡単です。唯一の問題は、これが特に高速ではないことです。また、コンソール モードのアプリでは機能しません。

于 2010-04-24T13:48:20.397 に答える
0

これがvb.net用であることは知っていますが、このc#コードは、わずかな変更を加えるだけで使用できると確信しています。これは私にとってはうまくいきました。たぶんそれはそれを行うための最良の方法ではありませんが、私にとってはそれが最も簡単な方法でした。2番目のコピーを実行する前に、アプリケーションタイトルが現在実行されているかどうかを確認します。

これはProgram.csにあります

 static frmMain Form;

    [STAThread]
    static void Main(string[] args)
    {
        bool blnCurrentlyRunning = false;

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        Process[] processes = Process.GetProcesses();
        foreach (var item in processes)
        {
            if (item.MainWindowTitle.IndexOf("Application Title") != -1)
                blnCurrentlyRunning = true;
        }

        if (!blnCurrentlyRunning)
        {
            Form = new frmMain();
            Application.Run(Form);
        }
        else
        {
            Application.Exit();
        }
    }
于 2012-10-19T07:17:24.753 に答える