Windows编程(操作注册表)

Windows编程(操作注册表)注册表存储在二进制文件里面,win32API提供了大量的函数操作注册表RegCreateKey创建指定的注册表项RegCreateKeyW(_In_

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

Windows编程(操作注册表)

注册表 存储在二进制文件里面, win32 API 提供了大量的函数操作注册表

RegCreateKey 创建指定的注册表项

RegCreateKeyW(
_
In_ HKEY hKey, //打开的当前项的句柄 实际上就是那几个分支
_
In_opt_ LPCWSTR lpSubKey,//打开或者创建的表项的名称
_
Out_ PHKEY phkResult //用来接收创建或者打开表项句柄 regclosekey
);
RegOpenKeyW(
_In_ HKEY hKey, //打开的当前项的句柄 实际上就是那几个分支
_
In_opt_ LPCWSTR lpSubKey,
_Out_ PHKEY phkResult
);

HKEY_CLASSES_ROOT

HKEY_CURRENT_CONFIG

HKEY_CURRENT_USER

HKEY_LOCAL_MACHINE

HKEY_USERS

写注册表

RegSetValueW(
_In_ HKEY hKey, //打开的当前项的句柄 实际上就是那几个分支
_In_opt_ LPCWSTR lpSubKey, //打开或者创建的表项的名称
_In_ DWORD dwType, //指示被存储信息的类型 REG_SZ类型
_
In_reads_bytes_opt_(cbData) LPCWSTR lpData,//要存放到注册表里面的数
据
_
In_ DWORD cbData //要存放的字符串数据的大小、 长度
);


RegSetValueExW(
_
In_ HKEY hKey, //打开的当前项的句柄 实际上就是那几个分支
_In_opt_ LPCWSTR lpValueName,//指向一个字符串的指针, 包含了将要设置
值的名称
_
Reserved_ DWORD Reserved,// 保留参数 0
_In_ DWORD dwType,//REG_BINARY
_In_reads_bytes_opt_(cbData) CONST BYTE * lpData,
_
In_ DWORD cbData
);

查询注册表

RegQueryValueW(
_
In_ HKEY hKey,
_In_opt_ LPCWSTR lpSubKey,
_Out_writes_bytes_to_opt_(*lpcbData, *lpcbData) __out_data_source(REGISTRY)
LPWSTR lpData,
_Inout_opt_ PLONG lpcbData
);

该api中有三个出参。内容分别是数据、数据类型、数据

创建与写入注册表

    {
	{
		DWORD DWage = 20;
		HKEY  hKey;
		 RegCreateKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Rock\\admin", &hKey);
	
			MessageBox(NULL, L"创建注册表成功", 0);
			int ret = ::RegSetValueEx(hKey, L"age", 0, REG_DWORD, (CONST BYTE*) & DWage, 4);
			if (ret != ERROR_SUCCESS) {
				MessageBox(NULL,L"写注册表失败", 0);


			}
			MessageBox(NULL,L"写注册表成功", 0);
		
		::RegCloseKey(hKey);
	}

}


查询注册表

{
	HKEY hKey;
	DWORD dwAge;
	//创建注册表项  VS2019自带的调试器管理员权限运行  自己的生成是以用户的权限运行
	int ret = ::RegOpenKeyW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Rock\\admin", &hKey);
	if (ret != ERROR_SUCCESS)
	{
		TRACE("##RegOpenKeyW Failed ,ErrorCode = %d,ret = %d", GetLastError(), ret);
		MessageBox(L"打开注册表失败");
		return;
	}

	//写注册表
	DWORD dwType;
	DWORD dwValue;
	ret = ::RegQueryValueEx(hKey, L"age", 0, &dwType, (LPBYTE)&dwAge, &dwValue);
	if (ret != ERROR_SUCCESS)
	{
		TRACE("##RegQueryValueEx Failed ,ErrorCode = %d,ret = %d", GetLastError(), ret);
		MessageBox(L"读注册表失败");
		return;
	}

	TRACE("###dwType = %d,dwValue = %d ,dwAge = %d", dwType, dwValue, dwAge);
	::RegCloseKey(hKey);
	
}

实际上除此外还有更底层的API能操作注册表

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119853.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • vim命令搜索_linux的vim

    vim命令搜索_linux的vim尽管目前我们已经涉及Vim的多种特性,但此编辑器的特性集如此庞大,不管我们学习多少,似乎仍然远远不足。承接我们的Vim教程系列,本文我们将讨论Vim提供的多种搜索技术。不过在此之前,请注意文中涉及到的所有的例子、命令、指令均是在Ubuntu14.04,Vim7.4下测试的。Vim中的基础搜索操作当你在Vim中打开一个文件并且想要搜索一个特定的单词或模板,第一步你必须要先按…

    2025年8月4日
    2
  • Android 中屏幕点击事件的实现

    Android 中屏幕点击事件的实现在android下,事件的发生是在监听器下进行,android系统能够响应按键事件和触摸屏事件,事件说明例如以下:onClick(Viewv)一个普通的点击button事件booleanonKey

    2022年7月3日
    19
  • ibatis动态传入表名造成的SQL注入的解决方案(摘录的)

    ibatis动态传入表名造成的SQL注入的解决方案(摘录的)

    2021年8月26日
    57
  • Jenkins入门(一)

    Jenkins入门(一)25.1CI/CD介绍互联网软件的开发和发布,已经形成了一套标准流程,假如把开发工作流程分为以下几个阶段:编码→构建→集成→测试→交付→部署正如你在上图中看到,持续集成(ContinuousIntegration)、持续交付(ContinuousDelivery)和持续部署(ContinuousDeployment)有着不同的软件自动化交付周期。持续集成(C…

    2022年6月2日
    38
  • Redis低成本高可用方案设计

    点击上方“全栈程序员社区”,星标公众号 重磅干货,第一时间送达 作者:蘑菇先生 cnblogs.com/mushroom/p/4526912.html 关于Redis高可用方案,看…

    2021年6月24日
    90
  • java ajax教程_JAVA AJAX教程第一章—初识AJAX

    java ajax教程_JAVA AJAX教程第一章—初识AJAX既然是认识AJAX,理论和实践相结合,这样让自己学的更快,理解更深入,我分一下几点:1、认识传统的同步交互方式和AJAX解决方案2、AJAX使用到的技术3、实例体验AJAX一、同步交互方式和AJAX解决方案传统的WEB应用是同步交互的方式,这种同步交互方式的处理过程如下图什么是同步交互方式:首先,用户向HTTP服务器提交一个处理请求。接着,服务器端接收到请求后,按照预先编写好的程序中的…

    2022年7月7日
    25

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号