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

我想知道如何获取Windows上的开始菜单文件夹的path,然后创build一个可能包含非ASCII字符的path的快捷方式

Solutions Collecting From Web of "C ++:如何在Windows的“开始”菜单中创build一个快捷方式"

这是解决方案。 它使用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); 

剩下的就是创建快捷方式。 交换所需值的快捷方式名称和说明。