根据注册表获取电脑程序路径。以ug为例


//根据注册表获取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;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我没醉吧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值