public static HRESULT SHResolveFolderPathInLibrary(IShellLibrary *plib, [NativeTypeName("PCWSTR")] ushort *pszFolderPath, [NativeTypeName("DWORD")] uint dwTimeout, [NativeTypeName("PWSTR *")] ushort **ppszResolvedPath) { * ppszResolvedPath = null; ITEMIDLIST *pidlFolder = SHSimpleIDListFromPath(pszFolderPath); HRESULT hr = unchecked ((pidlFolder) != null ? ((int)(0)) : ((int)(0x80070057))); if (((unchecked ((int)(hr))) >= 0)) { IShellItem *psiFolder; hr = SHCreateItemFromIDList(pidlFolder, __uuidof <IShellItem>(), (void **)(&psiFolder)); if (((unchecked ((int)(hr))) >= 0)) { IShellItem *psiResolved; hr = plib->ResolveFolder(psiFolder, dwTimeout, __uuidof <IShellItem>(), (void **)(&psiResolved)); if (((unchecked ((int)(hr))) >= 0)) { unchecked (hr) = psiResolved->GetDisplayName(SIGDN_DESKTOPABSOLUTEPARSING, ppszResolvedPath); _ = psiResolved->Release(); } _ = psiFolder->Release(); } CoTaskMemFree(pidlFolder); } return(hr); }
public static unsafe string SHGetPathFromIDList(ITEMIDLIST *pidl) { char *pszPath = stackalloc char[Kernel32.MAX_PATH + 1]; if (!SHGetPathFromIDList(pidl, pszPath)) { throw new ArgumentException(); } return(new string(pszPath)); }
public static HRESULT SHRemoveFolderPathFromLibrary(IShellLibrary *plib, [NativeTypeName("PCWSTR")] ushort *pszFolderPath) { ITEMIDLIST *pidlFolder = SHSimpleIDListFromPath(pszFolderPath); HRESULT hr = unchecked ((pidlFolder) != null ? ((int)(0)) : ((int)(0x80070057))); if (((unchecked ((int)(hr))) >= 0)) { IShellItem *psiFolder; unchecked (hr) = SHCreateItemFromIDList(pidlFolder, __uuidof <IShellItem>(), (void **)(&psiFolder)); if (((unchecked ((int)(hr))) >= 0)) { unchecked (hr) = plib->RemoveFolder(psiFolder); _ = psiFolder->Release(); } CoTaskMemFree(pidlFolder); } return(hr); }
public HRESULT Initialize([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlTarget, uint uDisplayType, [NativeTypeName("LPCWSTR")] ushort *pszResName, [NativeTypeName("LPCWSTR")] ushort *pszProvider) { return(((delegate * unmanaged <IInitializeNetworkFolder *, ITEMIDLIST *, ITEMIDLIST *, uint, ushort *, ushort *, int>)(lpVtbl[3]))((IInitializeNetworkFolder *)Unsafe.AsPointer(ref this), pidl, pidlTarget, uDisplayType, pszResName, pszProvider)); }
public HRESULT SetShellFolder(IShellFolder *psf, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlFolder, HKEY hKey, [NativeTypeName("DWORD")] uint dwFlags) { return(((delegate * unmanaged <IShellMenu *, IShellFolder *, ITEMIDLIST *, HKEY, uint, int>)(lpVtbl[5]))((IShellMenu *)Unsafe.AsPointer(ref this), psf, pidlFolder, hKey, dwFlags)); }
public HRESULT GetEnumFlags(IShellFolder *psf, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlFolder, HWND *phwnd, [NativeTypeName("DWORD *")] uint *pgrfFlags) { return(((delegate * unmanaged <IFolderFilter *, IShellFolder *, ITEMIDLIST *, HWND *, uint *, int>)(lpVtbl[4]))((IFolderFilter *)Unsafe.AsPointer(ref this), psf, pidlFolder, phwnd, pgrfFlags)); }
public static extern unsafe bool SHGetPathFromIDList( ITEMIDLIST *pidl, [Friendly(FriendlyFlags.Array)] char *pszPath);
public static extern unsafe HResult SHGetFolderLocation( IntPtr hwndOwner, CSIDL nFolder, IntPtr hToken, int dwReserved, out ITEMIDLIST *pidl);
public HRESULT BindToStorage([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, IBindCtx *pbc, [NativeTypeName("const IID &")] Guid *riid, void **ppv) { return(((delegate * unmanaged <IShellFolder2 *, ITEMIDLIST *, IBindCtx *, Guid *, void **, int>)(lpVtbl[6]))((IShellFolder2 *)Unsafe.AsPointer(ref this), pidl, pbc, riid, ppv)); }
public HRESULT GetDetailsEx([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, [NativeTypeName("const SHCOLUMNID *")] PROPERTYKEY *pscid, VARIANT *pv) { return(((delegate * unmanaged <IShellFolder2 *, ITEMIDLIST *, PROPERTYKEY *, VARIANT *, int>)(lpVtbl[17]))((IShellFolder2 *)Unsafe.AsPointer(ref this), pidl, pscid, pv)); }
public HRESULT InitializeSFB(IShellFolder *psf, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl) { return(((delegate * unmanaged <IShellFolderBand *, IShellFolder *, ITEMIDLIST *, int>)(lpVtbl[3]))((IShellFolderBand *)Unsafe.AsPointer(ref this), psf, pidl)); }
public HRESULT GetIconOf([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, uint flags, int *pIconIndex) { return(((delegate * unmanaged <IShellIcon *, ITEMIDLIST *, uint, int *, int>)(lpVtbl[3]))((IShellIcon *)Unsafe.AsPointer(ref this), pidl, flags, pIconIndex)); }
public HRESULT LeaveFolder(IShellFolder *psf, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl) { return(((delegate * unmanaged <INamespaceWalkCB2 *, IShellFolder *, ITEMIDLIST *, int>)(lpVtbl[5]))((INamespaceWalkCB2 *)Unsafe.AsPointer(ref this), psf, pidl)); }
public HRESULT RemoveIDList([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl) { return(((delegate * unmanaged <IResultsFolder *, ITEMIDLIST *, int>)(lpVtbl[6]))((IResultsFolder *)Unsafe.AsPointer(ref this), pidl)); }
public HRESULT AddIDList([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, [NativeTypeName("LPITEMIDLIST *")] ITEMIDLIST **ppidlAdded) { return(((delegate * unmanaged <IResultsFolder *, ITEMIDLIST *, ITEMIDLIST **, int>)(lpVtbl[4]))((IResultsFolder *)Unsafe.AsPointer(ref this), pidl, ppidlAdded)); }
public HRESULT IncludeObject(IShellView *ppshv, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl) { return(((delegate * unmanaged <ICommDlgBrowser *, IShellView *, ITEMIDLIST *, int>)(lpVtbl[5]))((ICommDlgBrowser *)Unsafe.AsPointer(ref this), ppshv, pidl)); }
public HRESULT SetParentAndItem([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlParent, IShellFolder *psf, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlChild) { return(((delegate * unmanaged <IParentAndItem *, ITEMIDLIST *, IShellFolder *, ITEMIDLIST *, int>)(lpVtbl[3]))((IParentAndItem *)Unsafe.AsPointer(ref this), pidlParent, psf, pidlChild)); }
public HRESULT GetDisplayNameOf([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, [NativeTypeName("SHGDNF")] uint uFlags, STRRET *pName) { return(((delegate * unmanaged <IShellFolder2 *, ITEMIDLIST *, uint, STRRET *, int>)(lpVtbl[11]))((IShellFolder2 *)Unsafe.AsPointer(ref this), pidl, uFlags, pName)); }
public HRESULT SetNameOf(HWND hwnd, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, [NativeTypeName("LPCWSTR")] ushort *pszName, [NativeTypeName("SHGDNF")] uint uFlags, [NativeTypeName("LPITEMIDLIST *")] ITEMIDLIST **ppidlOut) { return(((delegate * unmanaged <IShellFolder2 *, HWND, ITEMIDLIST *, ushort *, uint, ITEMIDLIST **, int>)(lpVtbl[12]))((IShellFolder2 *)Unsafe.AsPointer(ref this), hwnd, pidl, pszName, uFlags, ppidlOut)); }
private unsafe Result ShowDialog(HWND owner) { SelectedPath = ""; if (new FileOpenDialogInternal() is not IFileOpenDialog dialog) { throw new NullReferenceException(nameof(dialog)); } try { dialog.SetOptions((uint)(_FILEOPENDIALOGOPTIONS.FOS_PICKFOLDERS | _FILEOPENDIALOGOPTIONS.FOS_FORCEFILESYSTEM)); dialog.SetTitle(Title); if (Directory.Exists(InitializedPath)) { uint attributes = 0; ITEMIDLIST itemIdList; ITEMIDLIST *pItemIdList = &itemIdList; if (PInvoke.SHILCreateFromPath(InitializedPath, out pItemIdList, &attributes).Succeeded) { if (PInvoke.SHCreateShellItem(default(ITEMIDLIST), default, *pItemIdList, out IShellItem item0).Succeeded) { dialog.SetFolder(item0); } // ◆以下の必要性を確認する → 必要なさそう。ITEMIDLIST (struct) の唯一のメンバの SHITEMID も struct (on stack) なので解放いらんはず。 //if (itemIdList != IntPtr.Zero) Marshal.FreeCoTaskMem(idl); } } #if false // ◆本来はこちらの実装が正しいと思うけど、CsWin32 の IFileOpenDialog.Show が // HRESULT を返さないので(void戻り値なので)、しゃーなしで else側 の実装にした。 var hr = dialog.Show(owner); if (hr == Constants.ERROR_CANCELLED) { return(Result.Cancel); } if (hr != new HRESULT(0)) { return(Result.Abort); } #else try { // フォルダ選択ダイアログでキャンセルボタンを押すと COMException が発生する dialog.Show(owner); } catch (COMException) { return(Result.Cancel); } #endif dialog.GetResult(out IShellItem item); if (item is null) { return(Result.Abort); } item.GetDisplayName(SIGDN.SIGDN_FILESYSPATH, out PWSTR selectedPath); SelectedPath = selectedPath.ToString(); return(Result.OK); } finally { // ◆以下の必要性を確認する → これはCsWin32 と関係なく必要。 Marshal.FinalReleaseComObject(dialog); } }
public HRESULT GetDetailsOf([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, uint iColumn, SHELLDETAILS *psd) { return(((delegate * unmanaged <IShellFolder2 *, ITEMIDLIST *, uint, SHELLDETAILS *, int>)(lpVtbl[18]))((IShellFolder2 *)Unsafe.AsPointer(ref this), pidl, iColumn, psd)); }
public HRESULT SelectAndEditItem([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlItem, [NativeTypeName("NMCSAEI_FLAGS")] int flags) { return(((delegate * unmanaged <INewMenuClient *, ITEMIDLIST *, int, int>)(lpVtbl[4]))((INewMenuClient *)Unsafe.AsPointer(ref this), pidlItem, flags)); }
public HRESULT CompareIDs(LPARAM lParam, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl1, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl2) { return(((delegate * unmanaged <IShellFolder2 *, LPARAM, ITEMIDLIST *, ITEMIDLIST *, int>)(lpVtbl[7]))((IShellFolder2 *)Unsafe.AsPointer(ref this), lParam, pidl1, pidl2)); }
public HRESULT SetIDList([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl) { return(((delegate * unmanaged <IShellLinkA *, ITEMIDLIST *, int>)(lpVtbl[5]))((IShellLinkA *)Unsafe.AsPointer(ref this), pidl)); }
public static extern unsafe HResult SHGetKnownFolderIDList( [MarshalAs(UnmanagedType.LPStruct)] Guid rfid, KNOWN_FOLDER_FLAG dwFlags, IntPtr hToken, out ITEMIDLIST *pidl);
public HRESULT SetItemPos([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl, POINT *ppt) { return(((delegate * unmanaged <IShellFolderView *, ITEMIDLIST *, POINT *, int>)(lpVtbl[22]))((IShellFolderView *)Unsafe.AsPointer(ref this), pidl, ppt)); }
public HRESULT Initialize([NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidl) { return(((delegate * unmanaged <IPersistFolder3 *, ITEMIDLIST *, int>)(lpVtbl[4]))((IPersistFolder3 *)Unsafe.AsPointer(ref this), pidl)); }
public HRESULT ShouldShow(IShellFolder *psf, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlFolder, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlItem) { return(((delegate * unmanaged <IFolderFilter *, IShellFolder *, ITEMIDLIST *, ITEMIDLIST *, int>)(lpVtbl[3]))((IFolderFilter *)Unsafe.AsPointer(ref this), psf, pidlFolder, pidlItem)); }
public HRESULT AddObject([NativeTypeName("LPITEMIDLIST")] ITEMIDLIST *pidl, uint *puItem) { return(((delegate * unmanaged <IShellFolderView *, ITEMIDLIST *, uint *, int>)(lpVtbl[8]))((IShellFolderView *)Unsafe.AsPointer(ref this), pidl, puItem)); }
public HRESULT InitializeEx(IBindCtx *pbc, [NativeTypeName("LPCITEMIDLIST")] ITEMIDLIST *pidlRoot, [NativeTypeName("const PERSIST_FOLDER_TARGET_INFO *")] PERSIST_FOLDER_TARGET_INFO *ppfti) { return(((delegate * unmanaged <IPersistFolder3 *, IBindCtx *, ITEMIDLIST *, PERSIST_FOLDER_TARGET_INFO *, int>)(lpVtbl[6]))((IPersistFolder3 *)Unsafe.AsPointer(ref this), pbc, pidlRoot, ppfti)); }