我正在尝试使用文件对话框获取快捷方式的路径。以下是我的代码摘录,以说明我在做什么:
IFileOpenDialog *pfod = NULL;
IShellItem *psiResult;
PWSTR pszFilePath = NULL;
....
pfod->Show(NULL);
pfod->GetResult(&psiResult);
psiResult->GetDisplayName(SIGDN_FILESYSPATH, &pszFilePath);
当我在文件对话框中选择快捷方式时,例如<some path>\Internet.lnk
,对GetDisplayName的调用将返回快捷方式C:\Program Files(x86)\Internet Explorer\iexplorer.exe
的目标。我想获取快捷方式的路径,.lnk文件。
答案 0 :(得分:1)
默认情况下,文件对话框会解析其目标的快捷方式。返回给你的shell项目已经解决,那时做任何事都为时已晚。您需要在文件对话框的选项中包含FOS_NODEREFERENCELINKS
以停止执行快捷方式解析。
<强> FOS_NODEREFERENCELINKS 强>
不应将快捷方式视为目标项目。这允许应用程序打开.lnk文件而不是该文件的快捷方式。
设置选项的代码如下所示:
FILEOPENDIALOGOPTIONS fos;
pfod->GetOptions(&fos);
pfod->SetOptions(fos | FOS_NODEREFERENCELINKS);
请注意,为了简单说明,我遵循了忽略返回值的示例。