Qt寻找应用程序的目录位置(根据快捷方式)

小知识: 快捷方式其实也是有后缀的,后缀为.lnk。

注释:

  1. lnk文件一般是看不到的,反正我不用代码的话,无论如何也是不行;如果大家有办法靠window上的简单配置就可以看到的话,欢迎留言,我也学习下。
  2. 具体的请好好阅读代码中的注释,因为下面我只简单写了步骤。

 

第一步

根据目录 找出全部的lnk文件(快捷方式)。

// 传入参数:计算机的目录(一般是开始启动C:\ProgramData\Microsoft\Windows\Start Menu\Programs
//     异或是任意目录C:\Users\...\Desktop)
// 返回参数:找到的所有lnk地址。
QStringList GetFileList(const QString &path)
{
    QDir dir(path);
    QFileInfoList file_folder = dir.entryInfoList(QDir::Dirs | QDir::Files  | QDir::NoDotAndDotDot );
    QStringList files;
    for(int i = 0; i != file_folder.size(); i++)
    {
        QString name = file_folder[i].absoluteFilePath();
        if(name.endsWith("lnk", Qt::CaseInsensitive)) {
            files.append(file_folder[i].absoluteFilePath());
        } else if(file_folder[i].isDir()) {
            files.append(GetFileList(name));
        }
    }

    return files;
}

<使用方法>

#define StartMenu "C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs"
QStringList list = GetFileList(StartMenu);

 

第二步

读取lnk文件,找到exe文件

// 传入参数:快捷方式中的字段,越详细越好,如果带有.lnk就不会跟文件夹冲突了
//     或者自己再改改代码,是文件夹的话,字符串中该文件夹的后面肯定是带有\\或者/的。
// Example:我安装了VS。所以开始启动目录里就有
//   C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019\Visual Studio Tools\Developer PowerShell for VS 2019.lnk
//   和 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2019.lnk
//   如果参数想凭借"Visual Studio 20"来找到Visual Studio 2019.lnk的exe,Developer PowerShell for VS 2019.lnk的根文件夹的名字就会有冲突。所以如果想找到Visual Studio 2019.lnk的exe,用我的方法就必须传入全称(也就是Visual Studio 2019.lnk)
QString Editor::get(QString name)
{
    foreach(QString str, list) {
        // Qt::CaseInsensitive不区分大小写、Qt::CaseSensitive区分大小写
        if(str.contains(name, Qt::CaseInsensitive)) {
            QFile::remove("./temp.dat");
            QFile::copy(str, "./temp.dat");

            QFile file("./temp.dat");
            if(file.open(QIODevice::ReadOnly))
            {
                char arr[1000] = { 0 };
                QDataStream data(&file);
                data.readRawData(arr, 1000);
                QString temp;
                for(int i = 0; i < 1000; ++i)
                {
                    temp += arr[i];
                }

                int index_start = 0, index_end = 0;
                while(index_start != -1 && index_end != -1) {
                    index_start = temp.indexOf(":\\", index_start);
                    index_end = temp.indexOf(".exe", index_start);
                    QString file_name = temp.mid(index_start-1, index_end-index_start+5);
                    QFileInfo info(file_name);
                    if(info.isFile()) return file_name;
                    else {
                        index_start += 2;
                        index_end += 4;
                    }
                }
            }
        }
    }
    return QString();
}

<使用方法>

get("sublime");

get("Vrisual Studio 2019.lnk");

get("Vrisual Studio Code.lnk");

get("notepad++");

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt是一种跨平台的C++应用程序框架,它提供了一组丰富的库和工具,用于开发高性能、可扩展和易维护的应用程序。 对于Qt应用程序的打包,有多种方式可供选择。以下是两种常见的打包方式: 1. 使用Qt的部署工具:Qt提供了一个名为windeployqt(在Windows上)或macdeployqt(在macOS上)的工具,可以自动分析Qt应用程序依赖的动态库,并将它们一起打包到应用程序的文件夹中。此外,该工具还会进行一些其他的清理和修复。使用这种方式打包应用程序非常简单,只需在命令行中运行相应的工具即可。 2. 使用第三方打包工具:除了Qt提供的打包工具,还有一些第三方工具可以用来打包Qt应用程序,例如Inno Setup、NSIS、InstallShield等。这些工具可以帮助开发者更灵活地进行打包操作,例如添加桌面快捷方式、自定义安装界面等。使用这种方式打包应用程序需要先安装所选择的第三方工具,并按照其相应的使用手册进行配置和操作。 无论选择哪种打包方式,都需要注意以下几点: - 确保打包包含了所有依赖的动态库,以免在目标机器上出现缺少依赖的问题。 - 对于特定平台,例如Windows,可能还需要考虑提供Visual C++ Redistributable Packages等额外的依赖。 - 打包后的应用程序应该进行测试,以确保在目标机器上能够正确运行。 - 对于商业应用程序,还可以考虑使用代码签名来增强应用程序的安全性和可信度。 总之,Qt提供了一些简单易用的打包工具,同时也支持使用第三方工具来定制化打包操作。选择合适的打包方式可以使应用程序的部署更加方便和可靠。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值