Как получить информацию о targetPath, workingDir из снимков Microsoft Office (например, Word 2013.lnk)

Пытался использовать COM-интерфейс IShellLink для получения информации о файлах .LNK. Он отлично работает для многих ярлыков приложений, но для ярлыков приложений Microsoft Office Он не предоставляет правильную информацию. Например:

при чтении ProgramData \ Microsoft \ Windows \ Start Menu \ Programs \ Microsoft Office 2013 \ Word 2013.lnk

IShellLink :: GetPath возвращает "C: \ Windows \ Installer {90150000-0011-0000-0000-0000000FF1CE} \ wordicon.exe"

не C: \ Program Files (x86) \ Microsoft Office \ Office15 \ WINWORD.exe

Есть ли способ получить информацию о цели из таких файлов .lnk. какие окна используются для запуска приложения при двойном щелчке по ярлыку.

@Денис

Вот код C ++, который я пробовал

IShellLinkDataList* comShellLinkDataList;
if (SUCCEEDED(psl->QueryInterface(IID_IShellLinkDataList,(void**)&comShellLinkDataList)))
{
    DWORD flags = 0;
    if (SUCCEEDED(comShellLinkDataList->GetFlags(&flags)))
    {
        if (flags & SLDF_HAS_DARWINID)
        {
            PIDLIST_ABSOLUTE pidList;
            if (SUCCEEDED(psl->GetIDList(&pidList)))
            {
                IShellFolder* shellFolder;
                PCITEMID_CHILD childItem;
                if (SUCCEEDED(SHBindToParent(pidList, IID_IShellFolder, (void**)&shellFolder, &childItem)))
                {
                    STRRET strRet;
                    if (SUCCEEDED(shellFolder->GetDisplayNameOf(childItem, SHGDN_NORMAL | SHGDN_FORPARSING, &strRet)))
                    {
                        TCHAR path[MAX_PATH] = {0};
                        if (SUCCEEDED(StrRetToBuf(&strRet, childItem, path, MAX_PATH)))
                        {
                            return path;
                        }
                    }                                    
                }                                
            }

        }
    }  
}

person Rakesh    schedule 18.01.2014    source источник
comment
Дополнительная информация: я читал, что это называются объявленными ярлыками, но до сих пор не знаю, как получить целевую информацию с таких ярлыков.   -  person Rakesh    schedule 18.01.2014


Ответы (1)


person    schedule
comment
указанное выше также возвращает тот же путь C: \ Windows \ Installer {90150000-0011-0000-0000-0000000FF1CE} \ wordicon.exe для Word 2013.lnk - person Rakesh; 23.01.2014
comment
Я использовал C ++, я пробовал соответствующие API для C ++, добавил код в сообщение, но он не работает. - person Rakesh; 24.01.2014
comment
@ user807688 Я не вижу psl- ›Resolve (0, SLR_INVOKE_MSI) в вашем коде. - person Denis Anisimov; 24.01.2014