IShellLink COM インターフェイスを使用して、.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;
}
}
}
}
}
}
}