【发布时间】:2021-08-21 17:44:44
【问题描述】:
我在 Windows PC 中创建了一个shortcut,目标路径为:
C:\Users\b\Desktop\New Text Document.txt
然后我将快捷方式复制到另一台具有不同用户名的PC上,我想检索原始目标路径。
如果你用文本编辑器打开快捷方式文件,可以看到原来的路径被保留了,所以目标肯定是可以的。
尽管存在SLGP_RAWPATH,但以下代码不起作用。它输出:
C:\Users\a\Desktop\New Text Document.txt
它正在将用户文件夹名称更改为与正在运行的程序关联的名称。
我知道问题不在于环境变量,因为在文件中看不到环境变量名称。但我找不到任何关于这种自动重定位行为的文档。
IShellLinkW*lnk;
if (CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID*)&lnk) == 0){
IPersistFile* file;
if (lnk->QueryInterface(IID_IPersistFile, (void**)&file) == 0){
if (file->Load(L"shortcut", 0) == 0){
wchar_t path[MAX_PATH];
if (lnk->GetPath(path, _countof(path), 0, SLGP_RAWPATH) == 0){
_putws(path);
}
IShellLinkDataList* sdl;
if (lnk->QueryInterface(IID_IShellLinkDataList, (void**)&sdl) == 0){
EXP_SZ_LINK* lnkData;
if (sdl->CopyDataBlock(EXP_SZ_LINK_SIG, (void**)&lnkData) == 0){
_putws(lnkData->swzTarget);
LocalFree(lnkData);
}
sdl->Release();
}
}
file->Release();
}
lnk->Release();
}
【问题讨论】: