如何在 WPF 应用程式内开启某个目录的文件资源管理器?

在 WPF 应用程序中,当用户单击一个按钮时,我想打开某个目录的文件资源管理器,我该如何做呢?

我想会是这样的:

Windows.OpenExplorer("c:\test");
177703 次浏览

你可以使用 System.Diagnostics.Process.Start

或者将 WinApi 直接与下面这样的命令一起使用,它将启动 Explorer. exe。可以使用 ShellExecute 的第四个参数为它提供一个起始目录。

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 网站

为什么不是 Process.Start(@"c:\test");

这应该会奏效:

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;
}

然后调用该方法,并在括号中放入文件和/或文件夹的目录或应用程序的名称。希望这个有用!

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

我必须使用这个,另一种指定 tgt dir 的方法是在应用程序终止时关闭资源管理器窗口。

以下是对我有效的方法:

基本上使用命令行调用“ start C:/path” 然后退出终端,所以“ start c:/path & & exit”

WindowsExplorerOpen(@"C:/path");


public static void WindowsExplorerOpen(string path)
{
CommandLine(path, $"start {path}");
}


private static void CommandLine(string workingDirectory, string Command)
{
ProcessStartInfo ProcessInfo;
Process Process;


ProcessInfo = new ProcessStartInfo("cmd.exe", "/K " + Command + " && exit");
ProcessInfo.WorkingDirectory = workingDirectory;
ProcessInfo.CreateNoWindow = true;
ProcessInfo.UseShellExecute = true;
ProcessInfo.WindowStyle = ProcessWindowStyle.Hidden;


Process = Process.Start(ProcessInfo);
Process.WaitForExit();
}

这些对我都不管用:

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