首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Win.ini和注册表的读取写入

Win.ini和注册表的读取写入

作者头像
用户1198337
发布于 2018-01-19 02:45:19
发布于 2018-01-19 02:45:19
2.1K0
举报
文章被收录于专栏:我有一个梦想我有一个梦想

最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的16位操作系统下,配置信息放在Win.ini文件中。下面介绍一下Win.ini文件的读写方法和注册表的编程。

先介绍下Win.ini,,win.ini是Windows系统的一个基本系统配置文件。WIN.INI文件包含若干小节,每一节由一组相关的设定组成。文件配保存了诸如影响Windows操作环境的部分、控制系统界面显示形式及窗口和鼠标器的位置、联结特定的文件类型与相应的应用程序、列出有关HELP窗口及对话窗的默认尺寸、布局、文本颜色设置等等的选项。是系统配置不可缺少的文件。

Win.ini文件的读写

PlatForm SDKWriteProfileString()函数可以写入一个字符串到Win.ini文件的制定段中

PlatForm SDKGetProfileString()函数可以从Win.ini文件中获得指定的段中制定键的字符串信息。

往WIN.ini文件中写入内容和读取信息  ::WriteProfileString("name","dengyongbo","25");  char ch[100];  ::GetProfileString("name","dengyongbo","xiaoming",ch,100);  AfxMessageBox(ch);

注册表编程

但是CWinApp类的成员函数WriteProfileString()函数可以写入一个字符串到注册表的指定段中

但是CWinApp类的成员函数GetProfileString()函数可以从注册表中获得指定目录下的指定段的字符串信息。 往注册表中写入内容和读取信息

WriteProfileString("name","dengyongbo","25");  CString str;  str=GetProfileString("name","dengyongbo");  AfxMessageBox(str);

注意:在应用程序类的InitInstance()函数中,有一条如下的代码:SetRegistryKey(_T("Local AppWizard-Generated Applications"));我们上面往注册表中写入的美容都在Local AppWizard-Generated Applications目录下可以找到,我们可以重写这条语句,建立我们自己的目录。

在注册表编程之前,需要了解一下注册表中某一项的存放形式,每一条注册表项由名称、类型、数据三部分构成,如下图所示:

其中需要注意的是,上面两条注册表项的内容是很不一样的,首先在二者的名称上一种是没有名称的一种是有名称的;其次二者的类型也不同REG_SZ是一种普通的类型,除此之外还有REG_DWORD、REG_DWORD_LITTLE_ENDIAN等很多类型。以上区别需要用不同的方法向注册表中写入以上内容。

(1)读写无名称的注册表数据

<1>RegCreateKey()在指定目录下创建注册表项

<2>RegSetValue()往指定的注册表项中添加数据。注意:该函数只能添加无名称的类型为REG_SZ的数据

<3>RegCloseKey()关闭注册表项

<4>RegQueryValue()获取注册表中指定项的数据。该函数的第三个参数为空第四个参数不为空的话可以用第四个参数返回注册表中指定项的数据的长度,因此可以通过连续调用两次该函数巧妙完成注册表的读写,合理分配内存大小。示例代码如下:

代码语言:js
AI代码解释
复制
**************************************************************************                    往注册表中写入内容无名称并且类型为REG_SZ的数据  *************************************************************************/
 HKEY hkey;  
RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",&hkey); 
 RegSetValue(hkey,NULL,REG_SZ,"25",NULL); 
 RegCloseKey(hkey);
**************************************************************************                    从注册表中读取无名称并且类型为REG_SZ的数据  *************************************************************************/
char* pBuf;  long lvalue;  
RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",NULL,&lvalue);  
pBuf=new char[lvalue]; 
 RegQueryValue(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",pBuf,&lvalue);  MessageBox(pBuf);

(2)读写有名称的并且各种类型的注册表数据

<1>RegCreateKey()在指定目录下创建注册表项

<2>RegSetValueEx()往指定的注册表项中添加数据。注意:该函数能添加有名称和无名称以及各种类型的注册表数据

<3>RegCloseKey()关闭注册表项

<4>RegOpenKey()在读有名称的注册表数据时需先打开注册表

<5>RegQueryValueEx()接收有名称和各种类型的注册表数据

示例代码如下:

代码语言:js
AI代码解释
复制
/**************************************************************************                    往注册表中写入有名称和各种类型的数据  *************************************************************************/
 HKEY hkey;  DWORD dwage=30; 
 RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",&hkey); 
 RegSetValueEx(hkey,"bobo",0,REG_DWORD,(const BYTE*)&dwage,4);  
RegCloseKey(hkey);
/**************************************************************************                    从注册表中读取有名称和各种类型的数据  *************************************************************************/
 HKEY hkey;  DWORD dwtype;  DWORD dwvalue;  DWORD dwage;  RegOpenKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\dengyongbo\\age",&hkey);  RegQueryValueEx(hkey,"bobo",0,&dwtype,(LPBYTE)&dwage,&dwvalue);  CString str;  str.Format("age=%d",dwage);  MessageBox(str);

打包程序的时候,文件安装的路径要写入win.ini中,不然打开安装的程序会报Select Data Source的问题。若是在Installshield中的工程中修改了安装路径,不要忘了在读写win.ini的地方也修改。

更多关于注册表操作的函数请参看MSDN。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-12-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
那些你用的到的C++注册表操作
用户1423082
2024/12/31
1180
玩转注册表,这几个windowsAPI函数就够了
注册表是一个数据库,它的结构同逻辑磁盘类似。注册表包含键(Key),它类似磁盘中的目录,注册表还包含键值(Value),它类似磁盘中的文件。一个键可以包含多个子健和键值,其中键值用于存储数据,顶层建称为根键,注册表的根键如下图(Win+R 输入命令 regedit ):
DeROy
2020/08/11
4.3K0
Python 技术篇-用win32库实现读取、添加、修改注册表的值实例演示
默认添加注册表项的话需要在指定路径下进行添加,如果原注册表里路径就是不全的,添加会报错,下面的方法可以实现在添加注册表前检测路径是否是完整的,不完整的话会自动进行补全。
小蓝枣
2021/12/01
1.1K0
Python 技术篇-用win32库实现读取、添加、修改注册表的值实例演示
C/C++ 病毒破坏手法总结
创建不可删除文件: 创建不可删除文件关键在于在子目录中创建一个\\anti...\\文件,该文件在系统中有特殊用途.
王 瑞
2022/12/28
1K0
Windows编程(操作注册表)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119853.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/13
1.6K0
Qihoo 360 Security Guard 6.1.5.1009 - breg device drivers Privilege Escalation
https://www.exploit-db.com/exploits/11317/
用户1423082
2024/12/31
840
Qihoo 360 Security Guard 6.1.5.1009 - breg device drivers Privilege Escalation
MFC文件操作
文件操作:二进制文件和文本文件的区别。二进制文件将数据在内存中存在的模式原封不动的搬到文件中,而文本文件是将数据的asc码搬到文件中。 首先做一个读写文件的菜单,在CxxView里响应 1.C的方式: fwrite: size:Item size in bytes 每次写多少个字节 count:Maximum number of items to be written ,总共写几次。
全栈程序员站长
2022/07/18
2.5K0
Windows——添加右键菜单选项
思索
2024/08/16
3270
Windows——添加右键菜单选项
制作Win11PE用于云服务器
制作winpe的软件很多,我自己已经习惯用WimBuilder2,网上制作Win11PE的资料很少很少,这个完全是我摸索出来的,分享给有缘人。
Windows技术交流
2022/11/19
4.1K1
Win11彻底关闭Defender(包括禁用、删除Defender服务和文件夹)
一般是不建议禁止defender自动更新或者彻底关闭Defender的,但如果你有其他替代的安全方案了,觉得defender有干扰业务隐患,想干掉,那这篇文档非常适用。耗费了不少心血在server2016-2022和win10、win11上对比实践。
Windows技术交流
2023/05/26
24.3K0
Window权限维持(一):注册表运行键
在红队行动中在网络中获得最初的立足点是一项耗时的任务。因此,持久性是红队成功运作的关键,这将使团队能够专注于目标,而不会失去与指挥和控制服务器的通信。
Bypass
2019/11/07
1.2K0
Window权限维持(一):注册表运行键
C/C++ 操作注册表与服务
枚举注册表启动项: 遍历注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
王 瑞
2025/05/02
1320
C/C++ 实现读写注册表
读注册表 // 初始化 HKEY hKey_return = NULL; // 打开注册表失败 if(ERROR_SUCCESS != RegOpenKeyEx( HKEY_LOCAL_MACHINE, // 注册表根键句柄(也可以是 HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_USERS、HKEY_CURRENT_CONFIG) 去掉第一个参数后的注册表路径, // 注册表路径(开头无'\',结尾有'\') 0, // 保
王 瑞
2022/12/28
6120
API——注册表读取
在VBA CreateObject函数如何找到所需要的依赖文件中,为了找到了外部对象所依赖的文件,使用了WScript.Shell对象去读取注册表的信息,这里再介绍直接使用API来读取的方法,还是和操作文件类似,打开-读取-关闭三步:
xyj
2020/09/10
2K0
【MFC】 MFC文件操作和注册表操作
const char* p == char const *p 常量指针,表示指向的内容为常量,指针的指向可以修改,指针指向的内容不能修改。
半生瓜的blog
2023/05/13
1.6K0
【MFC】 MFC文件操作和注册表操作
C#使用P/Invoke来实现注册表的增删改查功能
注册表可以用来进行存储一些程序的信息,例如用户的权限、或者某些值等,可以根据个人需要进行存储和删减。
Wesky
2024/08/13
1520
C#使用P/Invoke来实现注册表的增删改查功能
如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码)
如何用 C 注册 windows 服务程序 (分析 Java Service Wrapper 代码) 前提:          从http://wrapper.tanukisoftware.org 下载 Java Service Wrapper 的源代码.     因为 Java Service Wrapper 同时提供windows 和 linux 上的实现,所以源文件夹里的代码都是分两份的.     在windows下的实现注册 windows 服务的代码在wrapper_win.c 文件中.     看了其中的代码后你会对作者的专业精神有深刻的体会,在wrapper_win.c文件中的历史变动说明就有300多行,详细描述了每次改动的变化.具体实现的方法中也都有详细的说明,所以看这样的代码基本上不费力气的.     如果非要说看代码是享受,  Java Service Wrapper  的源代码算一个.    下面我们看看它是如何实现注册一个exe文件为windows服务的.     wrapper_win.c中的入口main 函数定义如下:     void _CRTAPI1 main(int argc, char **argv)      //注意main定义的修饰_CRTAPI1     根据argv的输入参数分别执行,注册,取消,开始,停止windows服务的操作:     代码如下:    if(!_stricmp(argv[1],"-i") || !_stricmp(argv[1],"/i")) {           result = wrapperInstall(argc, argv);                              //注册服务    } else if(!_stricmp(argv[1],"-r") || !_stricmp(argv[1],"/r")) {           result = wrapperRemove();                                         //取消注册    } else if(!_stricmp(argv[1],"-t") || !_stricmp(argv[1],"/t")) {           result = wrapperStartService();                                   //启动服务    } else if(!_stricmp(argv[1],"-p") || !_stricmp(argv[1],"/p")) {            result = wrapperStopService(TRUE);                         //停止服务    }
田春峰-JCJC错别字检测
2019/02/14
7780
Windows注册表操作基础代码
Windows注册表操作基础代码     Windows下对注册表进行操作使用的一段基础代码Reg.h: #pragma once #include<assert.h> #include<windows.h> class Reg {     HKEY hkey; public: void open(HKEY root,char*subKey);//打开注册表键,不存在则创建 void del(HKEY root,char*subKey);//删除注册表键 void close();//关闭注册表键
Florian
2018/02/05
1.2K0
COM学习(二)——COM的注册和卸载
COM组件是跨语言的,组件被注册到注册表中,在加载时由加载函数在注册表中查找到对应模块的路径并进行相关加载。它的存储规则如下: 1. 在注册表的HKEY_CLASSES_ROOT中以模块名的方式保存着COM模块的GUID,比如HKEY_CLASSES_ROOT\ADODB.Error\CLSID键中保存着模块ADODB.Error的GUID为{00000541-0000-0010-8000-00AA006D2EA4} 2. 在HKEY_CLASSES_ROOT\CLSID中以GUID为项名保存着对应组件的详细信息,比如之前的{00000541-0000-0010-8000-00AA006D2EA4}这个GUID在注册表中的位置为HKEY_CLASSES_ROOT\CLSID\{00000541-0000-0010-8000-00AA006D2EA4}\InprocServer32\项的默认键中保存着模块所在路径为%CommonProgramFiles%\System\ado\msado15.dll 一般的COM模块都是使用regsvr32程序注册到注册表中,该程序在注册时会在模块中查找DllRegisterServer函数,卸载时调用模块中提供的DllUnregisterServer,所以要实现注册的功能主要需要实现这两个函数 这两个函数的原型如下:
Masimaro
2018/08/31
3.1K0
使用reg管理注册表
Windows注册表就相当于Windows系统的数据库,系统和软件的配置信息放在注册表里面。如果注册表出现了问题,可能导致系统崩溃。我们平时是使用 regedit.exe 命令来使用图形化界面管理注册表的。而在很多时候,使用图形化界面管理注册表很麻烦。所以今天介绍一种使用纯命令行的工具(reg.exe)来管理注册表。使用 reg.exe 可以对注册表进行添加、删除、修改、查看等操作。
谢公子
2022/01/20
2.3K0
使用reg管理注册表
相关推荐
那些你用的到的C++注册表操作
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档