• 易迪拓培训,专注于微波、射频、天线设计工程师的培养
首页 > HFSS > HFSS使用问答 > 32位QT程序读取64位系统的注册表中的64位安装软件

32位QT程序读取64位系统的注册表中的64位安装软件

录入:edatop.com     点击:

什么开启和关闭系统文件重定向,或者开启或关闭注册表反射,或者头文件定义#defineKEY_WOW64_64KEY256,我都试过了,至少对我来说,都没用,最终实现代码如下:

测试:在64位的win7上安装了64位和32位的HFSS几款软件,能读取64位的HFSS的安装路径,如果要读取32位的HFSS,只保留RegOpenKeyEx中的KEY_ALL_ACCESS

在QT下使用msvc或minGW时记得在工程中添加 ?LIBS += -lsetupapi -ladvapi32

QList<QString> ReadRegedit64()
{
    QList<QString> hfss64;
    hfss64.clear();
    QString Key = "SOFTWARE\\Ansoft\\HFSS\\1X.0\\Desktop";
    QList<QString> Key_List;
    for(int i=0;i<=6;i++)
    {
        QString  vesion_num = Key;
        vesion_num.replace("X",QString::number(i));
        Key_List.append(vesion_num);
    }
    for(int i=0;i<=6;i++)
    {
    LPCWSTR subkey = Key_List.at(i).utf16();
    HKEY key;
    if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,subkey,0, KEY_ALL_ACCESS | KEY_WOW64_64KEY,&key)==0)
    {
        char szDataFile[200]={0};

        QString install_dir = "InstallationDirectory";
        LPCWSTR subkey = install_dir.utf16();
        ULONG cbSize = 1024;
        RegQueryValueEx(key,subkey,NULL,NULL,(LPBYTE)szDataFile,&cbSize);
        QString hfss64_path = QString::fromUtf16((LPCTSTR)szDataFile);
        hfss64_path.insert(hfss64_path.size(),"/hfss.exe");
        hfss64.append(hfss64_path);
        RegCloseKey(key);
    }
    }


  return hfss64;

}

判断系统是否为64位:
typedef BOOL (WINAPI *LPFN_ISWOW64PROCESS) (HANDLE, PBOOL);
BOOL IsWow64()
{
    LPFN_ISWOW64PROCESS fnIsWow64Process;
    BOOL bIsWow64 = FALSE;
    fnIsWow64Process = (LPFN_ISWOW64PROCESS) GetProcAddress(
        GetModuleHandle(TEXT("kernel32")),"IsWow64Process");
    if(NULL != fnIsWow64Process)
    {
        if (!fnIsWow64Process(GetCurrentProcess(),&bIsWow64))
        {
        }
    }
    return bIsWow64;
}


申明网友回复良莠不齐,仅供参考。如需专业解答,请学习易迪拓培训专家讲授的HFSS视频培训教程

上一篇:如何实现FHSS模型和CST模型之间的相互导入导出!
下一篇:HFSS画helix和spiral

HFSS视频培训课程推荐详情>>
HFSS教程推荐

  网站地图