注册表获取autoCAD安装位置

embedded/2024/9/20 4:01:48/ 标签: AutoCAD

注意事项

注意:①64位操作系统注册表会重定向,RegOpenKeyEx第4个参数得加上KEY_WOW64_64KEY;②RegOpenKeyEx遍历子项时注意第2和第4参数,参考图:

③RegQueryValueEx同样得注意第6参数

完整代码

std::unordered_map<std::string, std::string> GetAllAutoCADInstallPaths() 
{// 定义结果映射,键为版本号,值为安装路径std::unordered_map<std::string, std::string> installPaths;// 打开 AutoCAD 注册表项HKEY hKey;LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Autodesk\\AutoCAD", 0, KEY_READ | KEY_WOW64_64KEY, &hKey);if (lResult != ERROR_SUCCESS) return installPaths;DWORD dwIndex = 0;TCHAR szSubKeyName[MAX_PATH];DWORD dwSize = sizeof(szSubKeyName);vector<string> vecSubKey;// 遍历子项while ((lResult = RegEnumKeyEx(hKey, dwIndex, szSubKeyName, &dwSize, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS) {vecSubKey.emplace_back(string("SOFTWARE\\Autodesk\\AutoCAD\\")+szSubKeyName);++dwIndex;dwSize = MAX_PATH;}vector<string> vecSubSubKey;for (auto &strKey : vecSubKey){HKEY hSubKey;LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey.c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &hSubKey);if (lResult != ERROR_SUCCESS) return installPaths;dwIndex = 0;while ((lResult = RegEnumKeyEx(hSubKey, dwIndex, szSubKeyName, &dwSize, NULL, NULL, NULL, NULL)) == ERROR_SUCCESS) {vecSubSubKey.emplace_back(strKey + "\\" + szSubKeyName);++dwIndex;dwSize = MAX_PATH;}// 关闭键RegCloseKey(hSubKey);}for(auto &strKey : vecSubSubKey){HKEY hSubKey;LONG lResult = RegOpenKeyEx(HKEY_LOCAL_MACHINE, strKey.c_str(), 0, KEY_READ| KEY_WOW64_64KEY, &hSubKey);if (lResult != ERROR_SUCCESS) return installPaths;char installPath[MAX_PATH];char name[MAX_PATH];DWORD size = MAX_PATH;if(RegQueryValueEx(hSubKey, "Location", NULL, NULL, reinterpret_cast<LPBYTE>(installPath), &size) == ERROR_SUCCESS) {size = MAX_PATH;RegQueryValueEx(hSubKey, "ProductName", NULL, NULL, reinterpret_cast<LPBYTE>(name), &size);installPaths[string(name)] = string(installPath);;}// 关闭键RegCloseKey(hSubKey);}// 关闭键RegCloseKey(hKey);return installPaths;
}

http://www.ppmy.cn/embedded/29026.html

相关文章

C++:智能指针

C&#xff1a;智能指针 内存泄漏RAII智能指针auto_ptrunique_ptrshared_ptr循环引用 weak_ptr deletershared_ptrunique_ptr 内存泄漏 内存泄漏是指程序在动态分配内存后&#xff0c;忘记或无法释放已经不再使用的内存&#xff0c;从而导致系统内存资源被逐渐耗尽的问题。这种…

JDK1.8新特性(剩余)【Stream;Optional;接口的类优先原则 和 接口冲突;日期时间组件 ;重复注解】--学习JavaEE的day43

day43 JDK1.8新特性 Stream 简介 Stream&#xff08;流&#xff09;是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;&#xff0c;生成元素序列。换言之&#xff0c;集合是存储数据的容器&#xff0c;流使用操作这些数据的 Stream可以对集合进行非…

Spring Boot应用部署 - War包部署

WAR包部署 将Spring Boot应用部署为WAR包并部署到外部Tomcat服务器上&#xff0c;需要进行一些特定的配置和步骤。以下是详细说明&#xff1a; 1. 修改打包方式 在项目的构建工具配置文件中&#xff08;通常是pom.xml for Maven&#xff09;&#xff0c;将打包方式改为war。…

李沐70_bert微调——自学笔记

微调BERT 1.BERT滴哦每一个词元返回抽取了上下文信息的特征向量 2.不同的任务使用不同的特性 句子分类 将cls对应的向量输入到全连接层分类 命名实体识别 1.识别应该词元是不是命名实体&#xff0c;例如人名、机构、位置 2.将非特殊词元放进全连接层分类 问题回答 1.给…

Python异步Redis客户端与通用缓存装饰器

前言 这里我将通过 redis-py 简易封装一个异步的Redis客户端&#xff0c;然后主要讲解设计一个支持各种缓存代理&#xff08;本地内存、Redis等&#xff09;的缓存装饰器&#xff0c;用于在减少一些不必要的计算、存储层的查询、网络IO等。 具体代码都封装在 HuiDBK/py-tools: …

AI 工具

你用过最好用的AI工具有哪些&#xff1f; 简介&#xff1a;探讨人们在使用AI工具时&#xff0c;最喜欢的和认为最好用的工具是哪些&#xff0c;展示AI技术的实际应用和影响。提醒&#xff1a;在发布作品前&#xff0c;请把不需要的内容删掉。 方向一&#xff1a;常用AI工具 AI…

套接字概念的理解

1.概念 套接字&#xff08;Socket&#xff09;是网络编程中的一个基本概念&#xff0c;它提供了一种机制&#xff0c;使得一台计算机上的应用程序能够与另一台计算机上的应用程序进行通信。在网络通信中&#xff0c;套接字充当了通信端点的角色&#xff0c;它使得不同主机之间…

富格林:夯实安全基础可信交易

富格林认为&#xff0c;对于投资者来说&#xff0c;进行真实交易之前一定要先学习安全可信的交易技巧夯实基础&#xff0c;因为新手投资者一般都是缺乏操作技巧和经验的。稍不注意就会容易出现亏损的情况&#xff0c;反而会打击到自身的积极性。为了更好地帮助大家夯实安全可信…

socat移植到arm+linux

socat是一个用于建立双向数据流传输的工具&#xff0c;它可以在不同的网络层上创建连接&#xff0c;并支持多种协议&#xff0c;如TCP、UDP、SSL等。它非常强大且易于使用&#xff0c;因此广泛用于网络开发和系统管理中&#xff0c;这里记录一下移植到嵌入式系统的过程。 下载s…

【Python】常用数据结构

1、熟悉字典和列表 2、使用条件判断语句 3、list列表中计算 1、从键盘输人一个正整数列表,以-1结束,分别计算列表中奇数和偶数的和。 &#xff08;1&#xff09;源代码&#xff1a; # 初始化奇数和偶数的和为0 odd_sum 0 even_sum 0 #输入 while True:num int(input(&qu…

NDK 基础(一)—— C 语言知识汇总

本系列文章主要是介绍一些 NDK 开发所需的基础知识&#xff0c;目录如下&#xff1a; NDK 基础&#xff08;一&#xff09;—— C 语言知识汇总 NDK 基础&#xff08;二&#xff09;—— C 语言基础与特性1 NDK 基础&#xff08;三&#xff09;—— C 语言基础与特性2 NDK 基础…

Spring MVC系列之异步请求

概述 Spring MVC的本质其实就是一个Servlet。在理解Spring MVC如何支持异步请求之前&#xff0c;需要先知道Servlet3异步如何支持异步请求。参考Servlet系列之Servlet3异步。 Spring MVC对异步请求的支持主要从三个类来看&#xff1a; AsyncWebRequest&#xff1a;requestWe…

网络中sta 和 ap含义

在网络领域中&#xff0c;“STA"通常代表"Station”&#xff0c;即站点的意思。在无线局域网&#xff08;WLAN&#xff09;或其他网络环境中&#xff0c;"STA"通常用来表示无线设备或终端设备&#xff0c;如笔记本电脑、智能手机、平板电脑等连接到无线网络…

c#Excel:2.写入Excel表 3.读取Excel表

--写入Excel表-- 该例首先从数据库aq中读取学生信息表staq(参考数据库章节)&#xff0c;然后将学生信息表中的数据写入Excel表格中 &#xff08;1&#xff09;在OfficeOperator类库项目的ExcelOperator类中定义索引器&#xff0c;用于获取Excel表格中的单元格&#xff0c;代码…

DNS解析过程

DNS解析过程 域名是为了方便记忆而专门建立的一套地址转换系统&#xff0c;要访问一台互联网上的服务器&#xff0c;最终还必须通过IP地址来实现&#xff0c;域名解析就是将域名重新转换为IP地址的过程。一个域名对应一个IP地址&#xff0c;一个IP地址可以对应多个域名&#x…

微软如何打造数字零售力航母系列科普07 - Azure PlayFab:你从未想过的世界上最大的开发工具(平台)

Azure PlayFab&#xff1a;你从未想过的世界上最大的开发工具 微软的James Gwertzman告诉GamesIndustry.biz Academy他帮助开发者成功的使命 制作游戏比以往任何时候都更容易上手。现在有无数的游戏引擎可供选择&#xff0c;其中大多数是免费的&#xff0c;PC空间的店面也同样重…

服务器数据恢复—多块磁盘离线导致阵列瘫痪,上层lun不可用的数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌MSA2000存储&#xff0c;该存储中有一组由8块SAS硬盘&#xff08;其中有一块热备盘&#xff09;组建的RAID5阵列&#xff0c;raid5阵列上层划分了6个lun&#xff0c;均分配给HP-Unix小型机使用&#xff0c;主要数据为oracle数据库和O…

Vue Canvas图片水印的绘制 图片加水印

效果 定义画布 <canvas width"800" height"800" ref"cn" ></canvas>绘制水印 draw(){const img new Image()img.srchttps://img1.baidu.com/it/u3035183739,1826404114&fm253&fmtauto&app138&fJPEGimg.onload(()…

产品思维和产品意识

1.产品思维是什么 叙事和思考框架&#xff0c;而不是事情本身广阔的叙事范围&#xff0c;而不是淡点从使用&#xff08;消费&#xff09;的角度感受&#xff0c;从设计&#xff08;生产&#xff09;的角度思考 2.产品思维是下意识反应 用什么方法解决谁的什么问题 3.用户体…

Ceph PG

概述 为了实现不同存储池之间的策略隔离&#xff0c;以及针对不同用途的存储池指定不同的容灾策略&#xff0c;ceph crush使用中间结构即Placement Group&#xff08;后续均以PG简称&#xff09;将应用数据对象进行映射后&#xff0c;写入OSD本地存储设备。PG也是我们日常运维…