public FShellFolder[] ListFolder() { IntPtr ptr = IntPtr.Zero; if (_face.EnumObjects(_handle, EShcontf.Folders | EShcontf.IncludeHidden, out ptr) == RWinShell.S_OK) { IntPtr pidlSub; int celtFetched; FObjects <FShellFolder> folders = new FObjects <FShellFolder>(); IEnumIDList list = (IEnumIDList)Marshal.GetObjectForIUnknown(ptr); while (list.Next(1, out pidlSub, out celtFetched) == RWinShell.S_OK) { if (celtFetched != RWinShell.S_FALSE) { break; } FShellFolder folder = new FShellFolder(); folder.Parent = this; folder.SetHandle(pidlSub); folder.RefreshInfo(); folders.Push(folder); } return(folders.ToArray()); } return(null); }
public void RefreshInfo() { // Name if (_parent != null && _parent is FShellFolder) { FShellFolder folder = (FShellFolder)_parent; _name = folder.GetSubObjectName(_handle); } // Info SShFileInfo info = new SShFileInfo(); EShGetFileInfo flag = EShGetFileInfo.Pidl | EShGetFileInfo.DisplayName | EShGetFileInfo.TypeName | EShGetFileInfo.Pidl | EShGetFileInfo.Icon | EShGetFileInfo.SmallIcon | EShGetFileInfo.SysIconIndex; IntPtr rsPtr = RShell32.SHGetFileInfo(FullPidl.Ptr, 0, ref info, Marshal.SizeOf(typeof(SShFileInfo)), flag); if (_name == null) { _name = info.szDisplayName; } _icon = info.iIcon; }
internal FShellFolder SelectFolder(string path) { IntPtr pidl = IntPtr.Zero; uint i, j = 0; FShellFolder folder = new FShellFolder(); _face.ParseDisplayName(_handle, IntPtr.Zero, path, out i, out pidl, ref j); folder._handle = pidl; _face.BindToObject(pidl, IntPtr.Zero, ref Guids.IID_IShellFolder, out folder._face); return(folder); }