注册表操作(VC_Win32)

数据类型

注册表的数据类型主要有以下四种:
显示类型(在编辑器中)   数据类型    说明                   
REG_SZ            字符串     文本字符串
REG_MULTI_SZ         多字符串    含有多个文本值的字符串
REG_BINARY          二进制数    二进制值,以十六进制显示.
REG_DWORD            双字      一个32位的二进制值,显示为8位的十六进制值.

各主键的简单介绍

· HKEY_LOCAL_MACHINE  是一个显示控制系统和软件的处理键.HKLM键保存着计算机的系统信息.它包括网络和硬件上所有的软件设置.

· HKEY_CLASSES_ROOT  是系统中控制所有数据文件的项.

· HKEY_USERS  将缺省用户和目前登陆用户的信息输入到注册表编辑器

· HKEY_CURRENT_USER  包含着在HKEY_USERS安全辨别里列出的同样信息

· HKEY_CURRENT_CONFIG  包括了系统中现有的所有配置文件的细节.HKEY_CURRENT_CONFIG允许软件和设备驱动程序员很方便的更新注册表,而不涉及到多个配置文件信息. HKEY_LOCAL_MACHINE中同样的数据和任何注册表的变化都会同时的变化.

相关函数

创建键 RegCreateKeyEx(次函数主要用于生成键(目录))

函数原型

LONG RegCreateKeyEx(

HKEY hKey,                                  // handle to open key

LPCTSTR lpSubKey,                           // subkey name

DWORD Reserved,                             // reserved

LPTSTR lpClass,                             // class string

DWORD dwOptions,                            // special options

REGSAM samDesired,                          // desired security access

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance

PHKEY phkResult,                            // key handle

LPDWORD lpdwDisposition                     // disposition value buffer

);

参数说明

· hKey:   要打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpSubKey:   指向一个用于定义子键路径的字符串

· Reserved,dwOptions,samDesired:   置0

· lpClass,lpSecurityAttributes:   置NULL

· phkResult:   用于接收键句柄

· lpdwDisposition:   接收的相关信息,取值如下

o REG_CREATED_NEW_KEY   创建成功

o REG_OPENED_EXISTING_KEY    键已存在

返回值:If the function succeeds, the return value is ERROR_SUCCESS.

打开键 RegOpenKeyEx

函数原型

LONG RegOpenKeyEx(

HKEY hKey,         // handle to open key

LPCTSTR lpSubKey,  // subkey name

DWORD ulOptions,   // reserved

REGSAM samDesired, // security access mask

PHKEY phkResult    // handle to open key

);

参数说明

· hKey:     要打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpSubKey:   指向一个用于定义子键路径的字符串

· ulOptions:   保留位,置0

· samDesired:   打开键后键的操作权限

· phResult:   接收打开的键的句柄

返回值:If the function succeeds, the return value is ERROR_SUCCESS

删除键 RegDeleteKey

函数原型

LONG RegDeleteKey(

HKEY hKey,         // handle to open key

LPCTSTR lpSubKey   // subkey name

);

参数说明

· hKey:   要打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpSubKey:   指向一个用于定义子键路径的字符串

返回值:If the function succeeds, the return value is ERROR_SUCCESS

修改/添加键值 RegSetValueEx

函数原型

LONG RegSetValueEx(

HKEY hKey,           // handle to key

LPCTSTR lpValueName, // value name

DWORD Reserved,      // reserved

DWORD dwType,        // value type

CONST BYTE *lpData,  // value data

DWORD cbData         // size of value data

);

参数说明

· hKey:   打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpValueName:   键值的名称

· Reserved:   保留位,置0

· dwType:   键值的类型

· lpData:   键值

· cbData:   键值数据长度

返回值:If the function succeeds, the return value is ERROR_SUCCESS

删除键值 RegDeleteValue

函数原型

LONG RegDeleteValue(

HKEY hKey,            // handle to key

LPCTSTR lpValueName   // value name

);

参数说明

· hKey:   打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpValueName:   键值的名称

返回值:If the function succeeds, the return value is ERROR_SUCCESS

读取键值 RegQueryValueEx

函数原型

LONG RegQueryValueEx(

HKEY hKey,            // handle to key

LPCTSTR lpValueName,  // value name

LPDWORD lpReserved,   // reserved

LPDWORD lpType,       // type buffer

LPBYTE lpData,        // data buffer

LPDWORD lpcbData      // size of data buffer

);

参数说明

· hKey:   打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpValueName:   键值的名称

· Reserved:   保留位,置0

· lpType:   接收键值的类型

· lpData:   接收键值

· lpcbData:   接收键值数据长度

#include "stdafx.h"

#include <windows.h>

#include <iostream>

using namespace std;

int main()

{

HKEY hKey;

LPCTSTR lpRun = L"Software\\_MyTest";

DWORD state,dwtype,sizeBuff;

long lRet;

char reBuff[10] = {0};

//lRet = RegCreateKeyEx(HKEY_CURRENT_USER,lpRun,0,NULL,0,0,NULL,&hKey,&state);

//if(lRet == ERROR_SUCCESS)

//{

//    if(state == REG_CREATED_NEW_KEY)

//        cout<<"表项创建成功"<<endl;

//

//    //关闭键

//    RegCloseKey(hKey);

//}

//else if (state == REG_OPENED_EXISTING_KEY)

//{

//cout<<"表项已存在"<<endl;

//}

//lRet = RegDeleteKey(HKEY_CURRENT_USER,lpRun);

//if (ERROR_SUCCESS == lRet)

//{

//cout<<"删除键成功"<<endl;

//}

//else

//cout<<"删除键失败"<<endl;

lRet = RegOpenKeyEx(HKEY_CURRENT_USER,lpRun,0,KEY_ALL_ACCESS,&hKey);

if (ERROR_SUCCESS == lRet)

{

cout<<"打开键成功"<<endl;

}

else

cout<<"打开键失败"<<endl;

LPCTSTR KeyName = L"KeyName";

char KeyValue[20];

DWORD type;

DWORD len = sizeof(KeyValue);

lRet = RegQueryValueEx(hKey,KeyName,0,&type,(BYTE*)KeyValue,&len);

if (ERROR_SUCCESS == lRet)

{

cout<<"查询键值成功------"<<KeyValue<<endl;

}

else

cout<<"查询键值失败"<<endl;

//LPCTSTR KeyName = L"KeyName";

//char KeyValue[] = "KeyValue";

//lRet = RegSetValueEx(hKey,KeyName,0,REG_SZ,(BYTE *)KeyValue,20);

//if (ERROR_SUCCESS == lRet)

//{

//cout<<"写入键值成功"<<endl;

//}

//else

//cout<<"写入键值失败"<<endl;

//LPCTSTR KeyName = L"KeyName";

//lRet = RegDeleteValue(hKey,KeyName);

//if (ERROR_SUCCESS == lRet)

//{

//cout<<"删除键值成功"<<endl;

//}

//else

//cout<<"删除键值失败"<<endl;

return 0;

}

注册表操作(VC_Win32)

数据类型

注册表的数据类型主要有以下四种:
显示类型(在编辑器中)   数据类型    说明                   
REG_SZ            字符串     文本字符串
REG_MULTI_SZ         多字符串    含有多个文本值的字符串
REG_BINARY          二进制数    二进制值,以十六进制显示.
REG_DWORD            双字      一个32位的二进制值,显示为8位的十六进制值.

各主键的简单介绍

· HKEY_LOCAL_MACHINE  是一个显示控制系统和软件的处理键.HKLM键保存着计算机的系统信息.它包括网络和硬件上所有的软件设置.

· HKEY_CLASSES_ROOT  是系统中控制所有数据文件的项.

· HKEY_USERS  将缺省用户和目前登陆用户的信息输入到注册表编辑器

· HKEY_CURRENT_USER  包含着在HKEY_USERS安全辨别里列出的同样信息

· HKEY_CURRENT_CONFIG  包括了系统中现有的所有配置文件的细节.HKEY_CURRENT_CONFIG允许软件和设备驱动程序员很方便的更新注册表,而不涉及到多个配置文件信息. HKEY_LOCAL_MACHINE中同样的数据和任何注册表的变化都会同时的变化.

相关函数

创建键 RegCreateKeyEx(次函数主要用于生成键(目录))

函数原型

LONG RegCreateKeyEx(

HKEY hKey,                                  // handle to open key

LPCTSTR lpSubKey,                           // subkey name

DWORD Reserved,                             // reserved

LPTSTR lpClass,                             // class string

DWORD dwOptions,                            // special options

REGSAM samDesired,                          // desired security access

LPSECURITY_ATTRIBUTES lpSecurityAttributes, // inheritance

PHKEY phkResult,                            // key handle

LPDWORD lpdwDisposition                     // disposition value buffer

);

参数说明

· hKey:   要打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpSubKey:   指向一个用于定义子键路径的字符串

· Reserved,dwOptions,samDesired:   置0

· lpClass,lpSecurityAttributes:   置NULL

· phkResult:   用于接收键句柄

· lpdwDisposition:   接收的相关信息,取值如下

o REG_CREATED_NEW_KEY   创建成功

o REG_OPENED_EXISTING_KEY    键已存在

返回值:If the function succeeds, the return value is ERROR_SUCCESS.

打开键 RegOpenKeyEx

函数原型

LONG RegOpenKeyEx(

HKEY hKey,         // handle to open key

LPCTSTR lpSubKey,  // subkey name

DWORD ulOptions,   // reserved

REGSAM samDesired, // security access mask

PHKEY phkResult    // handle to open key

);

参数说明

· hKey:     要打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpSubKey:   指向一个用于定义子键路径的字符串

· ulOptions:   保留位,置0

· samDesired:   打开键后键的操作权限

· phResult:   接收打开的键的句柄

返回值:If the function succeeds, the return value is ERROR_SUCCESS

删除键 RegDeleteKey

函数原型

LONG RegDeleteKey(

HKEY hKey,         // handle to open key

LPCTSTR lpSubKey   // subkey name

);

参数说明

· hKey:   要打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpSubKey:   指向一个用于定义子键路径的字符串

返回值:If the function succeeds, the return value is ERROR_SUCCESS

修改/添加键值 RegSetValueEx

函数原型

LONG RegSetValueEx(

HKEY hKey,           // handle to key

LPCTSTR lpValueName, // value name

DWORD Reserved,      // reserved

DWORD dwType,        // value type

CONST BYTE *lpData,  // value data

DWORD cbData         // size of value data

);

参数说明

· hKey:   打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpValueName:   键值的名称

· Reserved:   保留位,置0

· dwType:   键值的类型

· lpData:   键值

· cbData:   键值数据长度

返回值:If the function succeeds, the return value is ERROR_SUCCESS

删除键值 RegDeleteValue

函数原型

LONG RegDeleteValue(

HKEY hKey,            // handle to key

LPCTSTR lpValueName   // value name

);

参数说明

· hKey:   打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpValueName:   键值的名称

返回值:If the function succeeds, the return value is ERROR_SUCCESS

读取键值 RegQueryValueEx

函数原型

LONG RegQueryValueEx(

HKEY hKey,            // handle to key

LPCTSTR lpValueName,  // value name

LPDWORD lpReserved,   // reserved

LPDWORD lpType,       // type buffer

LPBYTE lpData,        // data buffer

LPDWORD lpcbData      // size of data buffer

);

参数说明

· hKey:   打开键的句柄或以下预定义句柄

o HKEY_CLASSES_ROOT

o HKEY_CURRENT_USER

o HKEY_LOCAL_MACHINE

o HKEY_USERS

· lpValueName:   键值的名称

· Reserved:   保留位,置0

· lpType:   接收键值的类型

· lpData:   接收键值

· lpcbData:   接收键值数据长度

#include "stdafx.h"

#include <windows.h>

#include <iostream>

using namespace std;

int main()

{

HKEY hKey;

LPCTSTR lpRun = L"Software\\_MyTest";

DWORD state,dwtype,sizeBuff;

long lRet;

char reBuff[10] = {0};

//lRet = RegCreateKeyEx(HKEY_CURRENT_USER,lpRun,0,NULL,0,0,NULL,&hKey,&state);

//if(lRet == ERROR_SUCCESS)

//{

//    if(state == REG_CREATED_NEW_KEY)

//        cout<<"表项创建成功"<<endl;

//

//    //关闭键

//    RegCloseKey(hKey);

//}

//else if (state == REG_OPENED_EXISTING_KEY)

//{

//cout<<"表项已存在"<<endl;

//}

//lRet = RegDeleteKey(HKEY_CURRENT_USER,lpRun);

//if (ERROR_SUCCESS == lRet)

//{

//cout<<"删除键成功"<<endl;

//}

//else

//cout<<"删除键失败"<<endl;

lRet = RegOpenKeyEx(HKEY_CURRENT_USER,lpRun,0,KEY_ALL_ACCESS,&hKey);

if (ERROR_SUCCESS == lRet)

{

cout<<"打开键成功"<<endl;

}

else

cout<<"打开键失败"<<endl;

LPCTSTR KeyName = L"KeyName";

char KeyValue[20];

DWORD type;

DWORD len = sizeof(KeyValue);

lRet = RegQueryValueEx(hKey,KeyName,0,&type,(BYTE*)KeyValue,&len);

if (ERROR_SUCCESS == lRet)

{

cout<<"查询键值成功------"<<KeyValue<<endl;

}

else

cout<<"查询键值失败"<<endl;

//LPCTSTR KeyName = L"KeyName";

//char KeyValue[] = "KeyValue";

//lRet = RegSetValueEx(hKey,KeyName,0,REG_SZ,(BYTE *)KeyValue,20);

//if (ERROR_SUCCESS == lRet)

//{

//cout<<"写入键值成功"<<endl;

//}

//else

//cout<<"写入键值失败"<<endl;

//LPCTSTR KeyName = L"KeyName";

//lRet = RegDeleteValue(hKey,KeyName);

//if (ERROR_SUCCESS == lRet)

//{

//cout<<"删除键值成功"<<endl;

//}

//else

//cout<<"删除键值失败"<<endl;

return 0;

}

注册表操作(VC_Win32)相关推荐

  1. RegistryCallback routine(CmRegisterCallback 注册表操作监控介绍)

    RegistryCallback routine 过滤器驱动程序的常规RegistryCallback可以监视,阻止或修改一个注册表操作. 句法 C ++ NTSTATUS CmRegisterCal ...

  2. Windows注册表操作基础代码

    Windows注册表操作基础代码   Windows下对注册表进行操作使用的一段基础代码Reg.h: #pragma once #include<assert.h> #include< ...

  3. win32api window2con 模块 -系统注册表操作

    #!/usr/bin/python # -*- coding: UTF-8 -*-#encoding=utf-8 #win32api #注册表操作# 注册表项 # HKEY_CLASSES_ROOT ...

  4. Windows核心编程_注册表操作和小练习程序关联

    大家有没有见过就是当我们下载一个软件比如视频播放器 下载之后我们电脑上的视频文件图标都变成了这个视频播放器的图标,然后打开时也是默认调用此视频播放器来播放 下面就给大家介绍如何在Windows平台上实 ...

  5. 注册表操作C/C++(实战实现程序自启动)

    C/C++ 注册表操作 注册表概述 一.注册表数据结构 二.相关函数 1.创建键 RegCreateKeyEx() 2.关闭键RegCloseKey() 3.关闭键RegOpenKeyEx() 4.修 ...

  6. QSettings配置读写-win注册表操作-ini文件读写

    版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QSettings配置读写-win注册表操作-ini文件读写     本文地址:http:// ...

  7. NSI 脚本 -注册表操作无法正常找到的问题

    今天在学习NSI脚本的时候 发现老师写的注册表操作在相应的注册表中无法找到,经过仔细的查询发现了是因为系统的问题 举个例子 WriteRegStr HKLM "Software\Micros ...

  8. Delphi 注册表操作

    Delphi程序中可利用TRegistry对象来存取注册表文件中的信息. 一.创建和释放TRegistry对象 1.创建TRegistry对象.为了操作注册表,要创建一个TRegistry对象:ARe ...

  9. Win7系统没有注册表操作权限的解决方法

    最近有部分用户反馈自己没有注册表权限,无法对注册表进行修改怎么办?其实很简单,下面小编就给大家带来Win7系统没有注册表操作权限的解决方法. 详细如下: 1.点击开始-运行-输入"gpedi ...

最新文章

  1. 从上往下 流式布局_教大家怎么写前端布局
  2. HDLBits 系列(14) Latch and Dff and Edge detect
  3. C# 导出word文档及批量导出word文档(2)
  4. access期刊可以重投几次_又被拒稿了?老司机带你一投即中
  5. Hybris UI的Route(路由)实现
  6. 电脑休眠和睡眠的区别_关机、睡眠、休眠有啥区别?微软说非特殊情况不要关机...
  7. kmeans算法_实战 | KMeans 聚类算法
  8. kendo-ui学习笔记——题记
  9. Java获得中文输入_使用java简单实现根据输入的汉字,得到汉字的首字母
  10. jquery Ajax应用
  11. 判断一段程序是由C 编译程序还是由C++编译程序编译的
  12. w10安装ubuntu_Windows10安装ubuntu18.04双系统教程
  13. Windows Server 2016-抢占FSMO角色
  14. paip.解决 数据库mysql增加列 字段很慢添加字段很慢
  15. 【软件测试系列十二】《压力测试报告模板》
  16. modelica用inertia连接FlangeWithBearing时报组件不匹配连接错误:incompatible components in connect statement
  17. 学堂在线数据结构上2
  18. 做阿里巴巴国际站比较容易踩雷的地方
  19. python之面向对象反射和双下方法
  20. 光线:提高照片的艺术感

热门文章

  1. 制作模块-安装模块压缩包
  2. spring项目搭建-注册对象到容器测试
  3. 加密与安全 - Java加密与安全
  4. php 获取设备,PHP获取设备类型实例代码
  5. Versions maven plugin 修改版本
  6. JavaFX 中 FX 一词的由来
  7. 智能、弹性、易用:云时代的负载均衡之道
  8. 细数非对称加密与对称加密的区别
  9. openstack之windows2003/08系统qcow2制作
  10. 当猪飞起来:也谈创业初期商业模式问题