当我在 Windows 上创建一个通用文件对话框时,我可以使用IFileDialog::AddPlace在左窗格中添加特定于应用程序的快捷方式。
快捷方式都显示在一个名为“应用程序链接”的虚拟文件夹中。但是当我点击“应用程序链接”时,该文件夹似乎是空的,只显示“没有符合您的搜索的项目。”:
当我单击“应用程序链接”本身时,是否可以在左窗格的“应用程序链接”中显示列出的所有快捷方式,也可以在右窗格中显示?如果是这样,我怎样才能做到这一点?
这是生成上面屏幕截图的代码的最小工作示例:
#include <windows.h>
#include <shobjidl.h>
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE);
if (SUCCEEDED(hr)) {
IFileDialog *pfd = NULL;
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));
if (SUCCEEDED(hr)) {
IShellItem *psiShortcut;
// Get ShellItem for "C:\Windows\System32"
hr = SHCreateItemFromParsingName(L"C:\\Windows\\System32", 0, IID_IShellItem, (void**) &psiShortcut);
if (SUCCEEDED(hr)) {
// Add the ShellItem for "C:\Windows\System32" to the file dialogs shortcut list
hr = pfd->AddPlace(psiShortcut, FDAP_BOTTOM);
if (SUCCEEDED(hr)) {
// Open file dialog and show result in a message box on OK
hr = pfd->Show(NULL);
if (SUCCEEDED(hr) && hr != HRESULT_FROM_WIN32(ERROR_CANCELLED)) {
IShellItem *psiFileName;
hr = pfd->GetResult( &psiFileName);
if (SUCCEEDED(hr)) {
PWSTR pwszFileName;
hr = psiFileName->GetDisplayName(SIGDN_FILESYSPATH, &pwszFileName);
if (SUCCEEDED(hr)) {
MessageBoxW(NULL, pwszFileName, L"Note", MB_OK);
CoTaskMemFree( pwszFileName );
}
psiFileName->Release();
}
}
}
psiShortcut->Release();
}
pfd->Release();
}
CoUninitialize();
}
return 0;
}