- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
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视频培训教程。