//根据注册表获取ug路径
string GetUGInstallPath11(string names)
{
HKEY hUninstallKey;
string resultPath = "";
/*这段函数是打开注册表中的指定键,并将其句柄存储在变量hUninstallKey中。具体解析如下:
1.HKEY_LOCAL_MACHINE:表示要访问的注册表根键,即HKEY_LOCAL_MACHINE根键,可以查看系统上的计算机配置信息。
2._T("SOFTWARE\Unigraphics Solutions\NX"):表示要访问的键路径,即在HKEY_LOCAL_MACHINE根键下访问SOFTWARE\Unigraphics Solutions\NX路径。
3.0:表示标志位,一般为0。
4.KEY_READ:表示请求访问键的权限,此处请求可读权限。
5.&hUninstallKey:表示要将打开的键的句柄存储在hUninstallKey变量中。
*/
LSTATUS sss = RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Unigraphics Solutions\\NX"), 0, KEY_READ, &hUninstallKey);
//
/*Installed Applications 目前10.0以上的( 这里不准确)
NX 目前10.0及以下的( 这里不准确)
*/
if (sss != ERROR_SUCCESS)
{
std::cout << "Can't open key" << endl;
return resultPath;
}
DWORD dwIndex = 0;
TCHAR szKeyName[256];
DWORD dwKeyNameSize = sizeof(szKeyName) / sizeof(szKeyName[0]);
/*这段函数是用于枚举指定键的子键,并将其名称存储在变量szKeyName中。具体解析如下:
1.hUninstallKey:表示要枚举子键的父键句柄,即前面打开的HKEY_LOCAL_MACHINE\SOFTWARE\Unigraphics Solutions\NX键的句柄。
2.dwIndex:表示要枚举的子键的索引。从0开始递增,直到所有子键都被枚举过。
3.szKeyName:表示存储子键名称的缓冲区。函数将子键名称存储在该缓冲区中。
4.&dwKeyNameSize:表示szKeyName缓冲区的大小(以字节为单位)。在函数调用时,该变量应设定为缓冲区的大小。函数将实际的子键名称长度返回在该变量中。
5.NULL, NULL, NULL, NULL:分别表示不需要枚举子键的类别、上次修改时间、最大值长度和子键数量。这些参数均为输出参数,可以为NULL。
6.该函数的作用是在HKEY_LOCAL_MACHINE\SOFTWARE\Unigraphics Solutions\NX键下枚举子键(即子项),获取所有已安装的Unigraphics软件的名称。
*/
LSTATUS s = RegEnumKeyEx(hUninstallKey, dwIndex, szKeyName, &dwKeyNameSize, NULL, NULL, NULL, NULL);
if (s != ERROR_SUCCESS)
{
std::cout << "Failed to get UG install path" << endl;
}
HKEY hAppKey;
std::wstring wsKeyName;
while (s == ERROR_SUCCESS)
{
std::string NXpanben = TCHARToString(szKeyName);
if (strcmp(names.c_str(), NXpanben.c_str()) == 0)
{
wsKeyName = szKeyName;
}
s = RegEnumKeyEx(hUninstallKey, dwIndex, szKeyName, &dwKeyNameSize, NULL, NULL, NULL, NULL);
}
/*这段函数是用于打开指定键的子键并返回该子键的句柄。具体解析如下:
1.hUninstallKey:表示要打开子键的父键句柄,即前面打开的HKEY_LOCAL_MACHINE\SOFTWARE\Unigraphics Solutions\NX键的句柄。
2.wsKeyName.c_str():表示要打开的子键名称。该名称是一个wstring类型的变量,使用c_str函数将其转换为C风格的字符串。
3.0:表示打开键时不附加任何选项。
4.KEY_READ:表示打开键时的访问权限。在此情况下,只允许读取键的值。
5.&hAppKey:表示函数成功返回时,用以接收打开的子键句柄的变量。
6.该函数的作用是打开HKEY_LOCAL_MACHINE\SOFTWARE\Unigraphics Solutions\NX键下指定名称的子键,该子键表示某个已安装的Unigraphics软件,以便在后续操作中读取该软件的详细信息。
*/
LSTATUS s1 = RegOpenKeyEx(hUninstallKey, wsKeyName.c_str(), 0, KEY_READ, &hAppKey);
if (s1 != ERROR_SUCCESS)
{
std::cout << "Failed to get UG install path" << endl;
}
TCHAR szInstallPath[256];
DWORD dwBufSize = sizeof(szInstallPath);
/*这段函数是用于获取指定键的值,具体解析如下:
1.hAppKey:表示要查询值的键的句柄,即前面打开的Unigraphics软件子键的句柄。
2.L"INSTALLDIR":表示要获取的值的名称,即INSTALLDIR,该值表示Unigraphics软件的安装路径。
3.NULL:表示不需要获取值的数据类型。
4.NULL:表示不需要获取值的数据大小。
5.(LPBYTE)szInstallPath:表示用于存储获取到的值的缓冲区,该缓冲区是一个字符串类型的数组,用于存储Unigraphics软件的安装路径。
6.&dwBufSize:表示存储获取到的值的缓冲区大小,该值是一个DWORD类型的变量,用于存储实际获取到的值的大小。
7.该函数的作用是获取Unigraphics软件的安装路径,并将其存储在指定的缓冲区中,以便后续的操作使用。注:本函数只读取键值,不修改任何键值。
*/
LSTATUS ssse = RegQueryValueEx(hAppKey, L"INSTALLDIR", NULL, NULL, (LPBYTE)szInstallPath, &dwBufSize);
if (ssse != ERROR_SUCCESS)
{
std::cout << "Failed to get UG install path" << endl;
}
else
{
resultPath = TCHARToString(szInstallPath);
}
RegCloseKey(hUninstallKey);
return resultPath;
}
根据注册表获取电脑程序路径。以ug为例
于 2023-08-01 10:40:21 首次发布