private DialogResult ShowVistaDialog(IWin32Window owner) { var frm = (NativeMethods.IFileDialog)(new NativeMethods.FileOpenDialogRCW()); uint options; frm.GetOptions(out options); options |= NativeMethods.FOS_PICKFOLDERS | NativeMethods.FOS_FORCEFILESYSTEM | NativeMethods.FOS_NOVALIDATE | NativeMethods.FOS_NOTESTFILECREATE | NativeMethods.FOS_DONTADDTORECENT; frm.SetOptions(options); if (InitialFolder != null) { NativeMethods.IShellItem directoryShellItem; var riid = new Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"); //IShellItem if (NativeMethods.SHCreateItemFromParsingName(InitialFolder, IntPtr.Zero, ref riid, out directoryShellItem) == NativeMethods.S_OK) { frm.SetFolder(directoryShellItem); } } if (DefaultFolder != null) { NativeMethods.IShellItem directoryShellItem; var riid = new Guid("43826D1E-E718-42EE-BC55-A1E261C37BFE"); //IShellItem if (NativeMethods.SHCreateItemFromParsingName(DefaultFolder, IntPtr.Zero, ref riid, out directoryShellItem) == NativeMethods.S_OK) { frm.SetDefaultFolder(directoryShellItem); } } if (frm.Show(owner.Handle) == NativeMethods.S_OK) { NativeMethods.IShellItem shellItem; if (frm.GetResult(out shellItem) == NativeMethods.S_OK) { IntPtr pszString; if (shellItem.GetDisplayName(NativeMethods.SIGDN_FILESYSPATH, out pszString) == NativeMethods.S_OK) { if (pszString != IntPtr.Zero) { try { Folder = Marshal.PtrToStringAuto(pszString); return(DialogResult.OK); } finally { Marshal.FreeCoTaskMem(pszString); } } } } } return(DialogResult.Cancel); }