public DialogResult ShowDialog(IWin32Window owner) { IntPtr handle; IntPtr zero = IntPtr.Zero; if (owner != null) { handle = owner.Handle; } else { handle = System.Design.UnsafeNativeMethods.GetActiveWindow(); } System.Design.UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(handle, (int)this.startLocation, ref zero); if (zero == IntPtr.Zero) { return(DialogResult.Cancel); } int num = (int)(this.publicOptions | ((FolderNameEditor.FolderBrowserStyles)((int)this.privateOptions))); if ((num & 0x40) != 0) { Application.OleRequired(); } IntPtr pidl = IntPtr.Zero; try { System.Design.UnsafeNativeMethods.BROWSEINFO lpbi = new System.Design.UnsafeNativeMethods.BROWSEINFO(); IntPtr pszPath = Marshal.AllocHGlobal(MAX_PATH); lpbi.pidlRoot = zero; lpbi.hwndOwner = handle; lpbi.pszDisplayName = pszPath; lpbi.lpszTitle = this.descriptionText; lpbi.ulFlags = num; lpbi.lpfn = IntPtr.Zero; lpbi.lParam = IntPtr.Zero; lpbi.iImage = 0; pidl = System.Design.UnsafeNativeMethods.Shell32.SHBrowseForFolder(lpbi); if (pidl == IntPtr.Zero) { return(DialogResult.Cancel); } System.Design.UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); this.directoryPath = Marshal.PtrToStringAuto(pszPath); Marshal.FreeHGlobal(pszPath); } finally { System.Design.UnsafeNativeMethods.IMalloc sHMalloc = GetSHMalloc(); sHMalloc.Free(zero); if (pidl != IntPtr.Zero) { sHMalloc.Free(pidl); } } return(DialogResult.OK); }
public DialogResult ShowDialog(IWin32Window owner) { IntPtr handle; IntPtr zero = IntPtr.Zero; if (owner != null) { handle = owner.Handle; } else { handle = System.Design.UnsafeNativeMethods.GetActiveWindow(); } System.Design.UnsafeNativeMethods.Shell32.SHGetSpecialFolderLocation(handle, (int) this.startLocation, ref zero); if (zero == IntPtr.Zero) { return DialogResult.Cancel; } int num = (int) (this.publicOptions | ((FolderNameEditor.FolderBrowserStyles) ((int) this.privateOptions))); if ((num & 0x40) != 0) { Application.OleRequired(); } IntPtr pidl = IntPtr.Zero; try { System.Design.UnsafeNativeMethods.BROWSEINFO lpbi = new System.Design.UnsafeNativeMethods.BROWSEINFO(); IntPtr pszPath = Marshal.AllocHGlobal(MAX_PATH); lpbi.pidlRoot = zero; lpbi.hwndOwner = handle; lpbi.pszDisplayName = pszPath; lpbi.lpszTitle = this.descriptionText; lpbi.ulFlags = num; lpbi.lpfn = IntPtr.Zero; lpbi.lParam = IntPtr.Zero; lpbi.iImage = 0; pidl = System.Design.UnsafeNativeMethods.Shell32.SHBrowseForFolder(lpbi); if (pidl == IntPtr.Zero) { return DialogResult.Cancel; } System.Design.UnsafeNativeMethods.Shell32.SHGetPathFromIDList(pidl, pszPath); this.directoryPath = Marshal.PtrToStringAuto(pszPath); Marshal.FreeHGlobal(pszPath); } finally { System.Design.UnsafeNativeMethods.IMalloc sHMalloc = GetSHMalloc(); sHMalloc.Free(zero); if (pidl != IntPtr.Zero) { sHMalloc.Free(pidl); } } return DialogResult.OK; }