Qt在windows查找注册表找到外部软件安装路径(此处以谷歌浏览器为例)

首先在windows上安装软件就会在注册表留下信息,其中就包括了软件安装路径,也就是exe软件的路径,找到这个路径之后,就可以用QProcess启动外部软件的进程了
但是这里有一个坑,就是软件安装后在注册表的信息不确定,一种在HKEY_CURRENT_USER路径下,如下:
在这里插入图片描述另外一种在HKEY_LOCAL_MACHINE
一般安装在C盘且是默认路径的都会是第一种情况,另外就是自定义安装在其他盘会是第二种情况,所以根据安装路径不同获取的方式不同,下面就是两种情况都可以获取出路径的代码:

void cradle::GetChromePath(QString& strPath)
{
    HKEY hKey;
    TCHAR SubKeyName[] = TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths\\chrome.exe");
    TCHAR ValueData[1024];
    char Data[1024];
    DWORD Buffer=1024;
    if(RegOpenKeyEx(HKEY_CURRENT_USER, SubKeyName, 0, KEY_READ, &hKey)!= ERROR_SUCCESS)
    {
        qDebug()<<"Error: Regedit cannot be opened! ";
    }

    else
    {
        if(RegQueryValueEx(hKey, TEXT("Path"), 0, NULL, (LPBYTE)ValueData, &Buffer) == ERROR_SUCCESS)
        {
            Wide2Bytes(Data, ValueData);
            QString strPathTemp =QString::fromStdWString(ValueData);
            strPathTemp +="\\chrome.exe";
            strPathTemp = strPathTemp.replace(QRegExp("\\\\"),"/");
            strPath = strPathTemp;
            RegCloseKey(hKey);
        }
        else
            qDebug()<<"RegQueryValueEx failed![ValueData = %s]",ValueData;
    }

    if(strPath != "")
    {
        return;
    }

    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, SubKeyName, 0, KEY_READ, &hKey)!= ERROR_SUCCESS)
    {
        qDebug()<<"Error: Regedit cannot be opened! ";
    }

    else
    {
        if(RegQueryValueEx(hKey, TEXT("Path"), 0, NULL, (LPBYTE)ValueData, &Buffer) == ERROR_SUCCESS)
        {
            Wide2Bytes(Data, ValueData);
            QString strPathTemp =QString::fromStdWString(ValueData);
            strPathTemp +="\\chrome.exe";
            strPathTemp = strPathTemp.replace(QRegExp("\\\\"),"/");
            strPath = strPathTemp;
            RegCloseKey(hKey);
        }
        else
            qDebug()<<"RegQueryValueEx failed![ValueData = %s]",ValueData;
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值