• Windows编程(操作注册表)


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

  • 相关阅读:
    POJ-2393
    POJ-1328
    POJ-2376
    CF-811B
    CF-811A
    CF-816B
    P1111 修复公路
    P2777 [AHOI2016初中组]自行车比赛
    P1889 士兵站队
    P1459 三值的排序 Sorting a Three-Valued Sequence
  • 原文地址:https://www.cnblogs.com/nice0e3/p/15170130.html
Copyright © 2020-2023  润新知