API---注册表编程
首先来认识一下键,项,值吧:

左边有五个根键:
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USER
HKEY_CURRENT_CONFIG
根键展开后可以看到子健:像 "SOFTWARE, Microsoft, Windows, CurrentVersion 等都是子健。
而最后一级便不是子健了,而是项:Run。
“名称栏” 下方的都称为 键值项。
“类型栏” 下方的都称为 键值项的类型。
“数据栏” 下方的都称为 键值项的键值。
RegCreateKeyEx() 介绍:
功能:创建或打开注册表键。
函数原型:LONG RegCreateKeyEx(
HKEY hKey, // 键的句柄 (RegCreateKey, RegCreateKey() 的返回值) 或者 预定义的值( 即五个根键)。
LPCTSTR lpSubKey, // 指向 要创建或要打开的子健名称。
DWORD Reserved, // 保留值必须为 0,
LPTSTR lpClass, // 指向一个字符串,该字符串定义了该键的类型。可以为空。
DWORD dwOptions, // 新创建的键的属性。
REGSAM samDesired, // 键的访问权限。
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向 SECURITY_ATTRIBUTES 结构的指针。
// 定义返回的句柄是否可以被子进程继承,为 NULL 表示不继承。
PHKEY phkResult, // 指向新创建或打开的键的句柄的指针,保存返回的句柄。
LPDWORD lpdwDisposition // 指明键是被创建还是被打开的
);
(入参,即输入的参数。出参,即输出的参数)
参数:dwOptions
REG_OPTION_NON_VOLATILE 新创建的键为一个非短暂性的键 (数据信息保存在文件中,当系统重新启动时,数据信息恢复)
REG_OPTION_VOLATILE 新创建的键为一个短暂性的键(数据信息保存在内存中)。
REG_OPTION_BACKUP_RESTORE 仅在WINNT中支持,可以提供优先级支持。
参数:samDesired
KEY_CREATE_LINK 准许生成符号键
KEY_CREATE_SUB_KEY 准许生成子键
KEY_ENUMERATE_SUB_KEYS 准许生成枚举子键
KEY_EXECUTE 准许进行读操作
KEY_NOTIFY 准许更换通告
KEY_QUERY_VALUE 准许查询子键
KEY_ALL_ACCESS 提供完全访问,是上面数值的组合
KEY_READ 是下面数值的组合:
KEY_QUERY_VALUE、KEY_ENUMERATE_SUB_KEYS、KEY_NOTIFY
KEY_SET_VALUE 准许设置子键的数值
KEY_WRITE 是下面数值的组合:
KEY_SET_VALUE、KEY_CREATE_SUB_KEY
参数:lpdwDisposition (出参)
REG_CREATED_NEW_KEY 键先前不存在,现在被创建。
REG_OPENED_EXISTING_KEY 键先前已存在,现在被打开。
返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
RegOpenKeyEx() 介绍:
功能:打开一个已经存在的子健。
函数原型:LSTATUS RegOpenKeyEx(
HKEY hKey,
LPCSTR lpSubKey,
DWORD ulOptions, // 保留值必须为 0。
REGSAM samDesired,
PHKEY phkResult
);
参数:同 RegCreateKeyEx()。
返回值:如果函数调用成功,则返回 ERROR_SUCCESS。否则返回非零的错误代码。
RegCloseKey() 介绍:
功能:关闭注册表。
函数原型:LONG RegCloseKey(
功能:删除注册表键值。(不能删除含有子健的子健)
HKEY hKey,
LPCSTR lpSubKey,
REGSAM samDesired,
DWORD Reserved // 保留值必须为 0。
功能:检索一个已打开的注册表句柄中,指定的注册表键的类型和设置值。
HKEY hKey, // 已打开项的句柄,或者指定一个标准项名。
LPCSTR lpValueName, // 要查询注册表键值的名字字符串,注册表键的名字,以空字符结束。
LPDWORD lpReserved, // 保留值必须为 0。
LPDWORD lpType, //用于装载取回数据类型的一个指针变量。
LPBYTE lpData, //用于装载指定值的一个缓冲区,可以为空。
LPDWORD lpcbData //用于装载 lpData 缓冲区长度的一个变量。一旦返回,它会设为实际装载到缓冲区的字节数。
// 若 lpData 为 NULL, 则也为 NULL。
REG_BINARY 二进制数据
REG_DWORD 32位整数
REG_DWORD_LITTLE_ENDIAN little-endian格式的数据,例如0X12345678以(0X78 0X56 0X34 0X12)方式保存
REG_DWORD_BIG_ENDIAN big-endian格式的数据,例如0X12345678以(0X12 0X34 0X56 0X78)方式保存
REG_EXPAND_SZ 一个包含未扩展环境变量的字符串
REG_LINK 一个Unicode类型的链接
REG_MULIT_SZ 以两个零结尾的字符串
REG_NONE 无类型数值
REG_RESOURCE_LIST 设备驱动资源列表
REG_SZ 一个以零结尾的字符串根据函数使用的字符集类型的不同而设置为Unicode或ANSI类型的字符串。
HKEY hKey,
LPCTSTR lpValueName,
DWORD Reserved,// 保留值必须为0。
DWORD dwType,
CONST BYTE *lpData,
DWORD cbData
);
HKEY hKey,
LPCSTR lpValueName // 指向要删除的值名。
);
#include<stdio.h>
#include<Windows.h>
int main(void)
{
LONG Long, Long0;
HKEY hKey = NULL;
char Buffer[] = "www.baidu.com";
Long = RegOpenKeyEx(HKEY_CURRENT_USER,
"SOFTWARE\\Microsoft\\Internet Explorer\\Main",
,
KEY_ALL_ACCESS,
&hKey);
if (Long != ERROR_SUCCESS)
{
printf("Open Error!\n");
system("pause");
exit();
} Long0 = RegSetValueEx(hKey,
"Start Page",
,
REG_SZ,
(CONST BYTE *)Buffer,
strlen(Buffer)); if (Long0 != ERROR_SUCCESS)
{
printf("Set Value Error!\n");
system("pause");
exit();
} printf("Modify Succeed!\n");
system("pause");
return ;
}
API---注册表编程的更多相关文章
- 【API】注册表编程基础-RegCreateKeyEx、RegSetValueEx
1.环境: 操作系统:Windows 10 x64 编译器:VS2015 2.关键函数 LONG WINAPI RegCreateKeyEx( _In_ HKEY hKey, _In_ LPCTSTR ...
- C++ 注册表编程
原文 C++ 注册表编程 1.基础知识 注册表的组织方式跟文件目录比较相似,主要分为根键.子键和键值项三部分,与文件目录对应的话就是根目录.子目录和文件.分别介绍一下这三部分: (1)根键.分为5个, ...
- windows 注册表编程
例子:将本地计算机的Monitor ID写入到注册表中 (1)获取MonitorID BOOLEAN DeviceMonitorService::EnumClassDevice(const GUID ...
- WIN7/XP用注册表关联指定后缀名和打开程序(手动【图文】和C编程两种实现)
前言: 本文是基本原理介绍和手动的操作.程序实现该功能在http://blog.csdn.net/arvon2012/article/details/7839556,同时里面有完整代码的下载. 今天在 ...
- Win.ini和注册表的读取写入
最近在做打包的工作,应用程序的配置信息可以放在注册表文件中,但是在以前的16位操作系统下,配置信息放在Win.ini文件中.下面介绍一下Win.ini文件的读写方法和注册表的编程. 先介绍下Win.i ...
- C#注册表操作类--完整优化版
using System; using System.Collections.Generic; using System.Text; using Microsoft.Win32; namespace ...
- 10#Windows注册表的那些事儿
引言 用了多年的Windows系统,其实并没有对Windows系统进行过深入的了解,也正是由于Windows系统不用深入了解就可以简单上手所以才有这么多人去使用.笔者是做软件开发的,使用的基本都是Wi ...
- C#注册表读写完整操作类
1.注册表基项静态域 /// <summary> /// 注册表基项静态域 ///1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT 主键 ///2.R ...
- C#注册表操作类(完整版) 整理完整
/// <summary> /// 注册表基项静态域 /// /// 主要包括: /// 1.Registry.ClassesRoot 对应于HKEY_CLASSES_ROOT主键 /// ...
- 《天书夜读:从汇编语言到windows内核编程》八 文件操作与注册表操作
1)Windows运用程序的文件与注册表操作进入R0层之后,都有对应的内核函数实现.在windows内核中,无论打开的是文件.注册表或者设备,都需要使用InitializeObjectAttribut ...
随机推荐
- Docker下kafka学习三部曲之一:极速体验kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,从本章开始我们先极速体验,再实战docker下搭建kafka环境,最后开发一个java web应用来体验kafka服务. 我们一起用最快的速度体验ka ...
- HBase介绍、安装与应用案例
搭建环境 部署节点操作系统为CentOS,防火墙和SElinux禁用,创建了一个shiyanlou用户并在系统根目录下创建/app目录,用于存放 Hadoop等组件运行包.因为该目录用于安装hadoo ...
- Ubuntu16.4安装Vivado Design Suite sdx2019.1
1:下载安装包.到Xilinx官网下载下面为网址: https://www.xilinx.com/support/download.html 2:进入安装包路径,打开终端 Ctrl+alt +t sh ...
- 03 (H5*) Vue第三天
目录: 1:Vue-resource中的全局配置. 2:Vue动画2部曲 3:animate动画 4:钩子函数动画 5:组件三部曲,推荐使用template标签来创建组件模板 1:Vue-resour ...
- centos使用android studio遇到的一些问题
1.下载完成后进入bin目录启动 ./studio 2. 由于google被墙,SDK 下载不了, 照此教程添加下载源 http://jingyan.baidu.com/album/adc815137 ...
- bug的生命周期
一 Bug重现环境 这个应该是我们重现bug的一个前提,没有这个前提,可能会无法重现问题,或根本无从下手. 操作系统 这个是一般软件运行的一大前提,基本上所有的软件都依赖于操作系统之上的,对于一个软 ...
- 前端面试题——html与css基础篇
整理一波html和css的面试题,侧重基础,希望明天面试能用到~(╥╯^╰╥) 一.HTML部分 1.浏览器页面有哪三层构成,分别是什么,作用是什么? 构成:结构层.表示层.行为层分别是:HTML.C ...
- spring boot 配置访问其他模块包中的mapper和xml
maven项目结构如下,这里只是简单测试demo,使用的springboot版本为2.1.3.RELEASE 1.comm模块主要是一些mybatis的mapper接口和对应的xml文件,以及数据库表 ...
- 痞子衡嵌入式:史上最强i.MX RT学习资源汇总(持续更新中...)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MX RT学习资源. 类别 资源 简介 官方汇总 i.MXRT产品主页 恩智浦官方i.MXRT产品主页,最权威的资料都在这里,参考手 ...
- Python内置函数之enumerate() 函数
enumerate() 函数属于python的内置函数之一: python内置函数参考文档:python内置函数 转载自enumerate参考文档:python-enumerate() 函数 描述 e ...