1

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

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

4

1 回答 1

1

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

FOS_NODEREFERENCELINKS

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

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

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

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

于 2013-11-13T16:16:46.740 回答