static bool _ShellItemFromString(string path, out api.IShellItem si) { if (path.Starts(":: ")) { var p = Pidl.FromString(path); if (p == null) { si = null; return(false); } return(0 == api.SHCreateItemFromIDList(p.UnsafePtr, typeof(api.IShellItem).GUID, out si)); } else { return(0 == api.SHCreateItemFromParsingName(path, default, typeof(api.IShellItem).GUID, out si));
static string _ShellItemToString(api.IShellItem r) { //if(!f.Has(api.FOS.FOS_FORCEFILESYSTEM)) { // var k=r.GetAttributes(0xffffffff); // if(0==(k&api.SFGAO_FILESYSTEM)) { // print.it(k); // } //} var s = r.GetDisplayName(SIGDN.FILESYSPATH | SIGDN.URL); //info: for a non-FS item, even with SIGDN.FILESYSPATH gets string like "::{GUID}" return(Pidl.ClsidToItemidlist_(s)); }