親フォルダのIShellFolderと親フォルダからの相対的なPIDLを取得する。
/// <summary>
///
/// </summary>
/// <param name="lpifq">the item's fully qualified PIDL</param>
/// <param name="riid">インターフェイスのIID</param>
/// <param name="ppv">親フォルダのIShellFolder interface</param>
/// <param name="ppidlLast">親フォルダからの相対的なpidl</param>
/// <returns></returns>
[DllImport("shell32")]
public static extern int SHBindToParent(IntPtr lpifq, [In] ref Guid riid, out IntPtr ppv, out IntPtr ppidlLast);
/// <summary>
/// 親フォルダのIShellFolderと親フォルダからの相対的なPIDLを取得する。
/// </summary>
/// <param name="absolutePidl">アイテムのAbsolute PIDL</param>
/// <param name="parent">親フォルダのIShellFolder</param>
/// <param name="relativePidl">アイテムの親フォルダからのRelative PIDL</param>
/// <returns>If this function succeeds, it returns S_OK. Otherwise, it returns an HRESULT error code.</returns>
public static int MyBindToParent(IntPtr absolutePidl, out IShellFolder parent, IntPtr relativePidl)
{
IntPtr parentPtr = IntPtr.Zero;
int ret;
try
{
ret = SHBindToParent(absolutePidl, ref IID_IShellFolder, out parentPtr, out relativePidl);
if (ret != S_OK)
throw new Win32Exception();
parent = (IShellFolder)Marshal.GetTypedObjectForIUnknown(parentPtr, typeof(IShellFolder));
}
finally
{
if (parentPtr != IntPtr.Zero)
{
Marshal.Release(parentPtr);
}
}
return ret;
}
最終更新:2014年07月29日 19:12