Windows ExplorerをWPFアプリ内から特定のディレクトリに開くにはどうすればよいですか?


150

WPFアプリケーションで、ユーザーがWindowsエクスプローラーを特定のディレクトリに開きたいボタンをクリックすると、どうすればよいですか?

私はこのようなものを期待します:

Windows.OpenExplorer("c:\test");

回答:


306

なんでProcess.Start(@"c:\test");


9
注:これを使用して、他のアプリケーションを実行することもできます。Process.Start("calc.exe");電卓を実行します。実行可能ファイルへのフルパスを渡すと、実行できます。
ジェイミーペニー

1
LOL、はい、なぜ駄目なのか。おかしい、頭にApplication.Runがあり、ユビキタスなProcess.Startに到達できず、WPFが私とゲームをしていると思った。
Abel、

9
注:ない場合は、例外がスローされます。Process.Start( "explorer"、@ "c:\ test");を試してください。代わりに、例外を処理したくない場合。デフォルトのウィンドウが開きます。ただし、多くの場合、例外を処理する方が適切です。
アマルガメート2013

9
悪意のある誰か(または気付かない人)がそこに任意の文字列を取得できる場合、それらは任意のプログラムを実行できることに注意してください。@amalgamateの提案はより安全です。それ以外の場合は、パスがディレクトリであるかどうか、および以前に存在しているかどうかを確認してください。
クリスチャンロンドー14

3
もう一つの違いStart(dir)とは、Start("explorer.exe", dir)前者がために、既存のウィンドウを集中するスマート十分であるということであるdir。後者は、新しいウィンドウを毎回開いている間、1がある場合。
dlf

13

これはうまくいくはずです:

Process.Start(@"<directory goes here>")

または、プログラムを実行する方法/ファイルやフォルダを開く方法が必要な場合:

private void StartProcess(string path)
{
    ProcessStartInfo StartInformation = new ProcessStartInfo();

    StartInformation.FileName = path;

    Process process = Process.Start(StartInformation);

    process.EnableRaisingEvents = true;
}

次に、メソッドを呼び出し、括弧内にファイルおよび/またはフォルダのディレクトリまたはアプリケーションの名前を入れます。これが役に立てば幸い!


12

使用できますSystem.Diagnostics.Process.Start

または、Explorer.exeを起動する次のようなものでWinApiを直接使用します。ShellExecuteの4番目のパラメーターを使用して、開始ディレクトリを指定できます。

public partial class Window1 : Window
{
    public Window1()
    {
        ShellExecute(IntPtr.Zero, "open", "explorer.exe", "", "", ShowCommands.SW_NORMAL);
        InitializeComponent();
    }

    public enum ShowCommands : int
    {
        SW_HIDE = 0,
        SW_SHOWNORMAL = 1,
        SW_NORMAL = 1,
        SW_SHOWMINIMIZED = 2,
        SW_SHOWMAXIMIZED = 3,
        SW_MAXIMIZE = 3,
        SW_SHOWNOACTIVATE = 4,
        SW_SHOW = 5,
        SW_MINIMIZE = 6,
        SW_SHOWMINNOACTIVE = 7,
        SW_SHOWNA = 8,
        SW_RESTORE = 9,
        SW_SHOWDEFAULT = 10,
        SW_FORCEMINIMIZE = 11,
        SW_MAX = 11
    }

    [DllImport("shell32.dll")]
    static extern IntPtr ShellExecute(
        IntPtr hwnd,
        string lpOperation,
        string lpFile,
        string lpParameters,
        string lpDirectory,
        ShowCommands nShowCmd);
}

宣言はpinvoke.net Webサイトからのものです


1
はい、それを追跡するときにエラーが発生しました。<strike> strike </ strike>については知りませんでした。すごいですね
Edward Tanguay

1
残念ながら、これは回答/質問でのみ機能し、コメントでは機能しません;-)。更新しました。
アベル

+1このコードを使用して他のアプリを起動しますが、Process.Start()はまさに必要なものでした。
エドワードタングアイ

それがqに答えようとすると起こります。午前3時:明らかな;-)を逃します。とにかく、Process.Startが期待どおりに動作しないときにShellExecuteをよく使用することを覚えています(処理できないシナリオはほとんどありません)。
Abel、

あなたが(最初の2つの文の中で)winformsアプリケーションから機能するだろうと述べたもの、Application.Run( "explorer.exe")は機能しません。application.runは文字列を取りさえしないため
barlop

12
Process.Start("explorer.exe" , @"C:\Users");

私はこれを使用しなければなりませんでした。tgtdirを指定する他の方法は、アプリケーションが終了したときにエクスプローラーウィンドウを閉じます。


唯一の答えはAccess denied例外ではありません。
Matas Vaitkevicius
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.