gpt4 book ai didi

C++:如何在 Windows 的“开始”菜单中创建快捷方式

转载 作者:可可西里 更新时间:2023-11-01 09:28:26 25 4
gpt4 key购买 nike

我想知道如何获取 Windows 上开始菜单文件夹的路径,然后创建指向可能包含非 ASCII 字符的路径的快捷方式。

最佳答案

这是解决方案。它使用 Qt,但也可以不使用。然后只需使用 std::wstring 而不是 QString。为了连接路径和文件名,您必须使用字符串操作而不是使用 QDir

#include <shlobj.h> 

bool createStartMenuEntry(QString targetPath) {
targetPath = QDir::toNativeSeparators(targetPath);

WCHAR startMenuPath[MAX_PATH];
HRESULT result = SHGetFolderPathW(NULL, CSIDL_COMMON_PROGRAMS, NULL, 0, startMenuPath);

if (SUCCEEDED(result)) {
QString linkPath = QDir(QString::fromWCharArray(startMenuPath)).absoluteFilePath("Shortcut Name.lnk");

CoInitialize(NULL);
IShellLinkW* shellLink = NULL;
result = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_ALL, IID_IShellLinkW, (void**)&shellLink);
if (SUCCEEDED(result)) {
shellLink->SetPath(targetPath.toStdWString().c_str());
shellLink->SetDescription(L"Shortcut Description");
shellLink->SetIconLocation(targetPath.toStdWString().c_str(), 0);
IPersistFile* persistFile;
result = shellLink->QueryInterface(IID_IPersistFile, (void**)&persistFile);

if (SUCCEEDED(result)) {
result = persistFile->Save(linkPath.toStdWString().c_str(), TRUE);

persistFile->Release();
} else {
return false;
}
shellLink->Release();
} else {
return false;
}
} else {
return false;
}
return true;
}

那是获取开始菜单文件夹位置的部分:

WCHAR startMenuPath[MAX_PATH];
HRESULT result = SHGetFolderPathW(NULL, CSIDL_COMMON_PROGRAMS, NULL, 0, startMenuPath);

剩下的就是创建快捷方式了。将快捷方式名称和描述交换为您想要的值。

关于C++:如何在 Windows 的“开始”菜单中创建快捷方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33841911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com