using
System;
using
System.Runtime.InteropServices;
public
class
WindowsExplorer
{
[DllImport(
"Comdlg32.dll"
, SetLastError =
true
, ThrowOnUnmappableChar =
true
, CharSet = CharSet.Auto)]
public
static
extern
bool
GetOpenFileName([In, Out] OpenDialogFile ofn);
[DllImport(
"Comdlg32.dll"
, SetLastError =
true
, ThrowOnUnmappableChar =
true
, CharSet = CharSet.Auto)]
public
static
extern
bool
GetSaveFileName([In, Out] OpenDialogFile ofn);
[DllImport(
"shell32.dll"
, SetLastError =
true
, ThrowOnUnmappableChar =
true
, CharSet = CharSet.Auto)]
public
static
extern
IntPtr SHBrowseForFolder([In, Out] OpenDialogDir ofn);
[DllImport(
"shell32.dll"
, SetLastError =
true
, ThrowOnUnmappableChar =
true
, CharSet = CharSet.Auto)]
public
static
extern
bool
SHGetPathFromIDList([In] IntPtr pidl, [In, Out]
char
[] fileName);
/// <summary>
/// 調(diào)用WindowsExploer 并返回所選文件夾路徑
/// </summary>
/// <param name="dialogtitle">打開對話框的標題</param>
/// <returns>所選文件夾路徑</returns>
public
static
string
GetPathFromWindowsExplorer(
string
dialogtitle =
"請選擇下載路徑"
)
{
string
res;
OpenDialogDir ofn2 =
new
OpenDialogDir();
ofn2.pszDisplayName =
new
string
(
new
char
[2000]); ;
// 存放目錄路徑緩沖區(qū)
ofn2.lpszTitle = dialogtitle;
// 標題
ofn2.ulFlags = 0x00000040;
// 新的樣式,帶編輯框
IntPtr pidlPtr = WindowsExplorer.SHBrowseForFolder(ofn2);
char
[] charArray =
new
char
[2000];
for
(
int
i = 0; i < 2000; i++)
charArray[i] =
'\0'
;
WindowsExplorer.SHGetPathFromIDList(pidlPtr, charArray);
res =
new
String(charArray);
res = res.Substring(0, res.IndexOf(
'\0'
));
return
res;
}
}