如何阻止IFileDialog解析目标的快捷方式?

时间:2013-11-13 10:19:45

标签: windows winapi

我正在尝试使用文件对话框获取快捷方式的路径。以下是我的代码摘录,以说明我在做什么:

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文件。

1 个答案:

答案 0 :(得分:1)

默认情况下,文件对话框会解析其目标的快捷方式。返回给你的shell项目已经解决,那时做任何事都为时已晚。您需要在文件对话框的选项中包含FOS_NODEREFERENCELINKS以停止执行快捷方式解析。

  

<强> FOS_NODEREFERENCELINKS

     

不应将快捷方式视为目标项目。这允许应用程序打开.lnk文件而不是该文件的快捷方式。

设置选项的代码如下所示:

FILEOPENDIALOGOPTIONS fos;
pfod->GetOptions(&fos);
pfod->SetOptions(fos | FOS_NODEREFERENCELINKS);

请注意,为了简单说明,我遵循了忽略返回值的示例。