微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Qt app LNK:任务栏中的图标是LNK图标,不是应用程序图标

如何解决Qt app LNK:任务栏中的图标是LNK图标,不是应用程序图标

我有一个 Qt 应用程序,我需要在运行时将 LNK 保存到用户桌面中的 .exe 文件

LNK 图标必须是我在运行时的像素图,与我的 .EXE 图标不同

当我使用那个 LNK(可以有多个不同的图标)时,我的应用程序启动了,但任务栏中的图标是 LNK 图标,而不是我的应用程序图标

我该如何解决

我正在用这个截取代码创建一个链接

QString sPathTarget = [MY_EXE_PATH];
QString sLinkName = "link name";
QString sLinkArguments = "link arguments";
QString sLinkIcon = [MY_ICON_PATH]; // This icon will be the LNK icon,but also the icon
                                    // my app has in the taskbar when launched from the LNK
 
WCHAR pathDesktop[MAX_PATH];
HRESULT result = SHGetFolderPathW(NULL,CSIDL_DESKTOPDIRECTORY,NULL,pathDesktop);
 
if (SUCCEEDED(result)) {
    QString linkPath = QDir(QString::fromWChararray(pathDesktop)).absoluteFilePath(QString("%1.lnk").arg(sLinkName));
 
    CoInitialize(NULL);
    IShellLinkW* shellLink = NULL;
    result = CoCreateInstance(CLSID_ShellLink,CLSCTX_ALL,IID_IShellLinkW,(void**)&shellLink);
    if (SUCCEEDED(result)) {
        shellLink->SetPath(sPathTarget.toStdWString().c_str());
        shellLink->SetArguments(sLinkArguments.toStdWString().c_str());
        shellLink->SetIconLocation(sLinkIcon.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();
 
            bRet = true;
        }
        shellLink->Release();
    }
}

谢谢,

迭戈

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。