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能操作注册表

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

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