在VC++中访问和修改系统注册表 作者:陈伟 (转)

在VC++中访问和修改系统注册表 作者:陈伟 (转)[@more@]在VC++中访问和修改 系统注册表 作者:陈伟 发布时间:2001/05/14   文章摘要:   在实际的 编程工作中,我们遇到了如何在Visual C++中对 windows95/98注册表整个树状结构信息进行访问和修改的问题,如查询和修改注册表中 用户姓名和公司名称的有关信息。通过编程实践,我们实现了在Visual
C++中查询和修改系统注册表的有关信息。下面以一个实例说明具体的编程方法。  
正文: Javascript:window.close()"> 1165979323671.GIF  


在VC++中访问和修改系统注册表

  Windows95/98的注册表包含了Windows95/98的系统配置、PC机的硬件配置、win32应用程序和用户的其他设置信息。注册表和INI文件不同,它是多层次的树状数据结构,具有六个分支(根键),每个分支又由许多的键和键值组成,而每个键则代表一个特定的配置项目。
  在实际的编程工作中,我们遇到了如何在Visual C++中对Windows95/98注册表整个树状结构信息进行访问和修改的问题,如查询和修改注册表中用户姓名和公司名称的有关信息。通过编程实践,我们实现了在Visual
C++中查询和修改系统注册表的有关信息。下面以一个实例说明具体的编程方法。
  在Visual C++ 6.0或5.0环境中新建一基于对话框的工程,设置了两个命令按钮,名为“查询用户信息”和“修改用户信息”,用来查询和修改注册表中用户姓名和公司名称。这里须要指出的是,用户的信息位于系统注册表中
HKEY_LOCAL_MACHINESoftwaremicrosoftWindowsCurrentVersion的位置,键值名RegisteredOwner和RegisteredOrganization分别表示用户的姓名和用户公司的名称。
  1.查询用户信息的代码
  HKEY hKEY; //定义有关的 hKEY, 在查询结束时要关闭。
  LPCTSTR data_Set=″SoftwareMicrosoftWindowsCurrentVersion″;
  //打开与路径 data_Set 相关的 hKEY,第一个参数为根键名称,第二个参数表。
  //表示要访问的键的位置,第三个参数必须为0,KEY_READ表示以查询的方式。
  //访问注册表,hKEY则保存此函数所打开的键的句柄。
  long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_Set, 0, KEY_READ, &hKEY));
  if(ret0!=ERROR_SUCCESS) //如果无法打开hKEY,则终止程序的执行
  {MessageBox(″错误: 无法打开有关的hKEY!″);
  return;}
  //查询有关的数据 (用户姓名 owner_Get)。
  LPBYTE owner_Get=new BYTE[80];
  Dword type_1=REG_SZ ; DWORD cbData_1=80;
  //hKEY为刚才RegOpenKeyEx()函数所打开的键的句柄,″RegisteredOwner″。
  //表示要查 询的键值名,type_1表示查询数据的类型,owner_Get保存所。
  //查询的数据,cbData_1表示预设置的数据长度。
long ret1=::RegQueryValueEx(hKEY, ″RegisteredOwner″, NULL,
  &type_1, owner_Get, &cbData_1);
  if(ret1!=ERROR_SUCCESS)
  {
  MessageBox(″错误: 无法查询有关注册表信息!″);
  return;
  }
  // 查询有关的数据 (公司名 company_Get)
  LPBYTE company_Get=new BYTE [80];
  DWORD type_2=REG_SZ; DWORD cbData_2=80;
  long ret2=::RegQueryValueEx(hKEY, ″RegisteredOrganization″,
NULL,&type_2,company_Get, &cbData_2);
  if(ret2!=ERROR_SUCCESS)
  {
  MessageBox(″错误: 无法查询有关注册表信息!″);
  return;
   }
  // 将 owner_Get 和 company_Get 转换为 CString 字符串,
以便显示输出。
  CString str_owner=CString(owner_Get);
  CString str_company=CString(company_Get);
  delete[] owner_Get; delete[] company_Get;
  // 程序结束前要关闭已经打开的 hKEY。
  ::RegCloseKey(hKEY);
  ……
  这样,上述程序执行完毕,字符串str_owner和str_company则表示查询到的用户的姓名和公司的名称,在VC++中便可用对话框的方式将其显示出来。

  2.修改用户信息的代码(注意和上述的查询代码属于不同的函数体)
  在程序中我们先显示一个对话框,要求用户输入新的用户姓名和公司名称并按确认键,将取得CString类型的有关字符串。要先将其转换为LPBYTE(即unsigned
char*)型的数据类型,以便后面的函数调用。下面是程序中用到的将CString型转换为LPBYTE的转换函数:
  LPBYTE CString_To_LPBYTE(CString str)
  {
  LPBYTE lpb=new BYTE[str.GetLength()+1];
  <str.GetLength(); i++)lpb[i]=str[i];>
  for(int i=0; ibr>   lpb[str.GetLength()]=0;
  return lpb;
  }
  以下则是具体的修改注册表用户信息的代码:
  CString str_owner, str_company;
  …… //通过对话框输入新的用户信息,保存到str_owner和str_company
  //定义有关的 hKEY, 在程序的最后要关闭。
HKEY hKEY;
  LPCTSTR data_Set=″SoftwareMicrosoftWindowsCurrentVersion″;
  //打开与路径 data_Set 相关的hKEY,KEY_WRITE表示以写的方式打开。
  long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,
  data_Set, 0, KEY_WRITE, &hKEY));
  if(ret0!=ERROR_SUCCESS)
  {
  MessageBox(″错误: 无法打开有关的hKEY!″);
  return;
  }
  //修改有关数据(用户姓名 owner_Set),要先将CString型转换为LPBYTE。
  LPBYTE owner_Set=CString_To_LPBYTE(str_owner);
  DWORD type_1=REG_SZ;
  DWORD cbData_1=str_owner.GetLength()+1;
  //与RegQureyValueEx()类似,hKEY表示已打开的键的句柄,″RegisteredOwner″
  //表示要访问的键值名,owner_Set表示新的键值,type_1和cbData_1表示新值。
  //的数据类型和数据长度
  long ret1=::RegSetValueEx(hKEY, ″RegisteredOwner″, NULL,
  type_1, owner_Set, cbData_1);
  if(ret1!=ERROR_SUCCESS)
  {
  MessageBox(″错误: 无法修改有关注册表信息!″);
  return;
  }
  //修改有关的数据 (公司名 company_Set)
  LPBYTE company_Set=CString_To_LPBYTE(str_company);
  DWORD type_2=REG_SZ;
  DWORD cbData_2=str_company.GetLength()+1;
  long ret2=::RegSetValueEx(hKEY, ″RegisteredOrganization″, NULL,
  type_2, company_Set, cbData_2);
  if(ret2!=ERROR_SUCCESS)
  {
  MessageBox(″错误: 无法修改有关注册表信息!″);
  return;
   }
  执行上面的修改注册表的操作后,可打开注册表查看具体的数值,可以看到已经成功地修改了有关的数据了。
  以上实例讲述了如何在VC++中访问Windows98/95的系统注册表,我们可以很方便地查询及修改注册表的任何位置的有关信息。以上的程序在Visual
C++ 6.0中调试通过(Visual C++ 5.0与之类似),且运行结果正确。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752043/viewspace-989446/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752043/viewspace-989446/

信奥赛csp初赛高频考点【二分查找】(详细解析) 阅读详情

相关推荐

学习vc++中!!!

学习vc++中!!!现在想下载个access都不能,谁有啊,给个下载地址,谢了给来访者埋个红包

陈炜员(C/C++) 254

rust_hdc:用纯 Rust 重写鸿蒙设备连接器(HDC),一颗 3MB 二进制替代整个 C++ 工具链

协议层是性能敏感 + 安全敏感的:HDC 走 TCP/USB 批量传输,分包、握手、并发会话,Tokio 异步运行时天然匹配;跨平台一致性:macOS(IOKit)、Linux(libusb)、Windows、OHOS,同一套代码一个 flag 切换目标;产出即库:Rust 生态的 crate 分发让"工具""库"天然合一,crates.io 发布后即用。HDC 协议不大——核心 500 行 Rust 就能说清楚——但它连接的是整个鸿蒙开发者生态的日常。

夏天的博客 130

VC++访问修改系统注册表 作者陈伟

VC++访问修改系统注册表 作者陈伟 发布时间:2001/05/14  文章摘要:  在实际的编程工作中,我们遇到了如何在Visual C++中对Windows95/98注册表整个树状结构信息进行访问修改的问题,如查询修改注册表中用户姓名公司名称的有关信息。通过编程实践,我们实现了在Visual C++中查询

CandyCat的专栏 2558

C++】 定时器进阶:多层时间轮原理与任务迁移

单层时间轮虽然能够以较低的开销管理大量定时任务,但当任务延迟时间跨度很大时,要么需要大量槽位,要么需要额外维护轮数。多层时间轮通过将不同时间范围的任务放到不同层级中,实现类似“秒针、分针、时针”的分级管理。本文主要介绍多层时间轮为什么出现、各层如何划分、定时任务如何选择层级,以及高层任务如何逐步迁移到低层并最终执行。

qq_64148519的博客 107

【AI大模型接入SDK】Ollama API 流式增量响应

🎬 艾莉丝的简介: 1.2.2 curl 参数释义 :静默模式,屏蔽进度条、连接日志,仅输出响应内容 :指定 HTTP 请求方法为 POST :请求头,告知服务端请求体为 JSON 格式 :携带 POST 请求体 payload;bash 环境使用单引号包裹 JSON,避免 shell 解析 JSON 内部双引号 1.2.3 不同 stream 参数终端表现 :终端逐行吐出分片 JSON,模型边生成边返回数据 :阻塞等待模型全部推理完成,一次性输出完整 JSON 报文 1.3 Ollama 流式响

艾莉丝努力练剑的博客,感谢大家一直以来的对艾莉丝的支持和鼓励,uu们如果对C/C++方向感兴趣的话,可以通过艾莉丝主页的微信名片加艾莉丝的好友,和努力练剑的艾莉丝一起加油! 481

Linux的开发工具

包管理器就类似手机上的应用商店。

2401_88240248的博客 151

Person p2=Person(p) 的构造过程 RVO

C++17 的 guaranteed copy elision 使得 Person p2 = Person(p); 仅触发一次拷贝构造函数调用,且直接在 p2 的内存位置上完成构造,无需临时对象。Person(p) 不再代表独立的临时对象,而是“构造配方”,与 p2 的初始化为同一事件。p2 的地址始终不变,无搬运、无额外析构。此行为是标准保证,非优化结果,区别于旧版中可能发生的两次构造与移动。

jimy1的博客 135

嵌入式学习第38天——(汇编的基本使用(加减,函数声明;异常处理))

逻辑指令:and:与逻辑 orr: 或逻辑 eor:异或逻辑 bic:按位清0。算术指令:add:加法;rsc:反向带进位减法。比较逻辑:cmp:相当于C语言里的if。数据搬移:mov:相当于C语言里的赋值。

2503_90965834的博客 169

c语言保留标识符

不管是。

mingtiauigena的博客 281

C++进阶系列 ()】关于线程堆栈的那些事——new、delete、delete[]

文章主要讲C++中new/delete的原理,包括构造析构、异常安全、delete[]的cookie机制、placement new等。本文从“包工头”比喻切入,剖析C++中new/delete的底层原理:new包含内存分配与构造,且具备异常安全回滚;delete先析构再释放。重点讲解delete[]通过头部Cookie记录元素个数、逆序析构,误用delete会导致UB。并延伸至内存池重载、placement new及底层malloc/free调用,帮助读者掌握内存管理核心。

2501_93095927的博客 430

Logger的组装(c++20)

本篇文章到这里就结束了!!!!希望可以帮助大家理解~~~~

2503_93247646的博客 59

实现pytorch resnet18功能(二,c++ cudnn)

/输出32*32*32-----------------------显然输入也是32*32*32。, _ci(ci), _co(co), _h(h), _w(w), _jjh(juanjihe), _pad(pading) {//int stride=2,juanjihe=1时,pading=0;原因是残差块中最后一步只实现了相加,并没有实现relu,所以这个架构中,所有残差块类都跟有relu!

ganggangwawa的博客 165

C++修炼】哈希表的实现

本文系统讲解哈希表的实现原理与代码实践。首先介绍哈希的概念,说明其本质是关键字到存储位置的映射关系;随后讲解直接定址法及其适用场景。接着引入哈希表,分析哈希冲突与负载因子的权衡,并介绍除法散列法、乘法散列法全域散列法三种哈希函数。针对哈希冲突,重点讲解开放定址法(线性探测、二次探测、双重探测)与链地址法两种解决方案,并给出完整的 C++ 代码实现,涵盖插入、扩容、查找、删除以及字符串等非整型关键字的换处理。

Meanlong_的博客 427

VSCode C/C++环境设置

本文介绍了在VSCode中配置C/C++开发环境的完整流程:通过下载MinGW-w64工具链,安装C/C++及C/C++ Runner扩展,配置tasks.json与launch.json实现编译、运行与调试。重点说明了使用快捷键(如Ctrl+Shift+B编译、F5调试)及解决中文路径导致GDB报错的方法。适合初学者快速搭建高效C/C++开发环境。

念致达的博客 132

C++速通2

int a = 3;int b = 4;// 声明名字空间int main()int a = 1;// 1// ::表示全局作用域 2// 3// 4return 0;```一个函数使用virtual关键字修饰,就是虚函数,虚函数是函数覆盖的前提。在QtCreator中使用斜体字。```cpppublic:// 虚函数cout << "动物爱吃饭" << endl;

qq_63858767的博客 434

单元二 · 值语义与失效规则:容器的心理模型

[[The C++ Standard Library 2nd Edition-2012-英文版.pdf|STL 2nd (2012)]] §6.11.2/§7.11(值语义)、§7.2–7.3(失效表);[[C++ Move Semantics - The Complete Guide 2022 Version-2022-英文版.pdf|Move Semantics]] ch1.1.2/§4.3.6/§7.1:容器里装的到底是值还是引用?我的迭代器、引用、指针,哪一次操作之后就不能再用了?

linx295的博客 116

ai大模型接入 day7

在基于大模型(LLM)构建多轮对话助手时,底层核心服务通常是“无状态”的。为了支撑真实业务场景,必须在中间件或应用层构建可靠的会话管理(Session Management)机制。

qq_55640460的博客 166

单元四 · 对称认知·上:内存与指针

本文对比C与C++在内存管理中的典型写法,揭示C++通过类型系统标准库提升安全与效率。从malloc/free到new/delete、裸指针到智能指针(unique_ptr/shared_ptr)、指针+长度到std::span、定长数组到std::array、动态数组到std::vector,以及const char*到std::string/std::string_view,每一对都体现更高抽象层次的保障:构造/析构自动处理、所有权明确、边界检查、避免悬垂指针。核心在于:C代码需手动维护不变量,而C+

linx295的博客 61

ai大模型接入day9

为了同时兼容云端 API 模型本地部署模型,我们需要利用 C++ 的继承机制来设计配置结构体,并通过基类指针来执行子类对象(多态的典型应用)。在多态场景中,父类指针换为子类指针就如同把“动物”向下具体化为“狗”或“猫”。,我们可以优雅且安全地处理多态环境下的类型校验问题,极大地提升了 SDK 的稳定性健壮性。在 SDK 的底层实现中,为了保证资源的安全管理,我们通常会使用。将所有不同的子类配置统一管理,这正是基类指针发挥作用的地方。的方式管理资源的智能指针。:各种不同模型的接入,以及模型的交互。

qq_55640460的博客 114
上一篇: VC++中播放声音的方法 作者:李灿伟 (转)
下一篇: 椭圆形窗体的制作 (转)
csd3176
博客等级 码龄11年 20粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值