/// <summary> /// Select folder. /// </summary> /// <param name="owner">The owner.</param> /// <param name="remarkText">The remark text.</param> /// <returns></returns> public static string BrowserFolder(Window owner, string remarkText = "Select a folder") { var info = new LPBROWSEINFO(); if (owner == null) { owner = ZHApp.FrameworkMainWindow; } if (owner != null) { var wih = new WindowInteropHelper(owner); info.hwndOwner = wih.Handle; } info.lpszTitle = remarkText; info.pszDisplayName = string.Join(string.Empty, Enumerable.Range(0, 300).Select(c => (char)0)); info.ulFlags = 0x1 | 0x2 | 0x40; try { IntPtr pidl = SHBrowseForFolder(ref info); if (pidl == IntPtr.Zero) { return(null); } StringBuilder buf = new StringBuilder(1024); SHGetPathFromIDList(pidl, buf); return(buf.ToString()); } catch { return(null); } }
static extern IntPtr SHBrowseForFolder(ref LPBROWSEINFO lpbi);