DragDropHandlers IShellExtInit :: Initialize и пути UNH для UNC - PullRequest
0 голосов
/ 22 апреля 2011

У меня есть расширение оболочки, зарегистрированное в HKCR \ Folder \ shellex \ DragDropHandlers, и мне нужно вызвать GetVolumePathName () + GetVolumeInformation () для целевой папки (PIDL передан вам в IShellExtInit :: Initialize )

Проблема в том, что когда что-то сбрасывается в «ярлыке Nethood» (My Network Places\sharename), PIDL, переданный в Initialize, ссылается на ярлык Nethood, а не на путь UNC!(Вызов SHGetPathFromIDList для PIDL возвращает "%USERPROFILE%\NetHood\SHARE on MACHINE", а не "\\MACHINE\SHARE", как вы ожидаете)

Я также попытался создать IShellItem из PIDL и вызвать IShellItem :: GetDisplayName с различными значениями SIGDN, но ни одно из них не возвращаетпуть UNC.

Как я могу получить путь UNC из этого PIDL?

1 Ответ

1 голос
/ 22 апреля 2011
// error checking omitted
IShellFolder* pFolder = NULL;
LPCITEMIDLIST pidlChild = NULL;
hr = SHBindToParent(pidl, IID_IShellFolder, (void**)&pFolder, &pidlChild);
SFGAOF Attributes = SFGAO_LINK;
hr = pFolder->GetAttributesOf(1, &pidlChild, &Attributes);
if(Attributes & SFGAO_LINK)
{
    // item is a link; get it's target path
    IShellLink* pLink = NULL;
    hr = pFolder->GetUIObjectOf(NULL, 1, &pidlChild, IID_IShellLink, NULL, (void**)&pLink);
    TCHAR szPath[MAX_PATH];
    hr = pLink->GetPath(szPath, MAX_PATH, NULL, 0); // szPath now contains path of UNC share
    pLink->Release();
    pLink = NULL;
}
pFolder->Release();
pFolder = NULL;
...