Skip to content Skip to footer

Windows编程(操作注册表)

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

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

RegCreateKey 创建指定的注册表项

代码语言:javascript复制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

写注册表

代码语言:javascript复制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

);查询注册表代码语言:javascript复制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中有三个出参。内容分别是数据、数据类型、数据

创建与写入注册表代码语言:javascript复制 {

{

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);

}

}查询注册表

代码语言:javascript复制{

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.cn/119853.html原文链接:https://javaforall.cn

Copyright © 2088 天龙游戏协会活动中心 - 武侠MMO专属福利 All Rights Reserved.
友情链接