晚了一點,但如果您想要在瀏覽器窗口中打開的文件夾中選擇一個或多個文件,可以使用shell32方法SHOpenFolderAndSelectItems
。該方法重用現有窗口(如果有),否則打開一個新窗口。
[DllImport("shell32.dll")]
private static extern int SHOpenFolderAndSelectItems(IntPtr pidlFolder, uint cidl, [MarshalAs(UnmanagedType.LPArray)] IntPtr[] apidl, uint dwFlags);
[DllImport("shell32.dll")]
private static extern void SHParseDisplayName([MarshalAs(UnmanagedType.LPWStr)] string name, IntPtr bindingContext, out IntPtr pidl, uint sfgaoIn, out uint psfgaoOut);
public static void ShowFileInExplorer(string folderPath, string filePath)
{
Shell32.SHParseDisplayName(Path.GetFullPath(folderPath), IntPtr.Zero, out IntPtr folder, 0, out uint psfgaoOut);
if (folder == IntPtr.Zero)
{
return;
}
Shell32.SHParseDisplayName(Path.GetFullPath(filePath), IntPtr.Zero, out IntPtr file, 0, out psfgaoOut);
if (file != IntPtr.Zero)
{
IntPtr[] files = { file };
Shell32.SHOpenFolderAndSelectItems(folder, (uint)files.Length, files, 0);
Marshal.FreeCoTaskMem(file);
}
Marshal.FreeCoTaskMem(folder);
}
本示例僅選擇一個文件,但可以輕鬆擴展以選擇多個文件。
爲什麼你必須首先使用瀏覽器?你想達到什麼目的? – ChrisBint
爲什麼不使用'System.Diagnostics.Process.Start(filePath)'?這樣就可以用指定的默認程序打開文件。 – Alex
@ChrisBint我們的應用程序有客戶端。每個客戶都有一個存放各種文件的文件夾。我們希望在客戶端文件夾中打開瀏覽器,以便他們可以瀏覽/編輯/複製等...客戶端文檔。 –