注册表操作(VC_Win32)

目录

注册表概述
注册表相关函数详解
注册表编程


注册表概述

概述

注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用.这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等.

数据结构

注册表由键(或称"项")、子键(子项)和值项构成.一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键.一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成.一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值.

数据类型

注册表的数据类型主要有以下四种:
显示类型(在编辑器中)   数据类型    说明                   
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:   要打开键的句柄或以下预定义句柄
    • HKEY_CLASSES_ROOT
    • HKEY_CURRENT_USER
    • HKEY_LOCAL_MACHINE
    • HKEY_USERS
  • lpSubKey:   指向一个用于定义子键路径的字符串
  • Reserved,dwOptions,samDesired:   置0
  • lpClass,lpSecurityAttributes:   置NULL
  • phkResult:   用于接收键句柄
  • lpdwDisposition:   接收的相关信息,取值如下
    • REG_CREATED_NEW_KEY   创建成功
    • REG_OPENED_EXISTING_KEY    键已存在

打开键 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:     要打开键的句柄或以下预定义句柄
    • HKEY_CLASSES_ROOT
    • HKEY_CURRENT_USER
    • HKEY_LOCAL_MACHINE
    • HKEY_USERS
  • lpSubKey:   指向一个用于定义子键路径的字符串
  • ulOptions:   保留位,置0
  • samDesired:   打开键后键的操作权限
  • phResult:   接收打开的键的句柄

删除键 RegDeleteKey

函数原型

LONG RegDeleteKey(   HKEY hKey,         // handle to open key   LPCTSTR lpSubKey   // subkey name );

参数说明

  • hKey:   要打开键的句柄或以下预定义句柄
    • HKEY_CLASSES_ROOT
    • HKEY_CURRENT_USER
    • HKEY_LOCAL_MACHINE
    • HKEY_USERS
  • lpSubKey:   指向一个用于定义子键路径的字符串

修改/添加键值 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:   打开键的句柄或以下预定义句柄
    • HKEY_CLASSES_ROOT
    • HKEY_CURRENT_USER
    • HKEY_LOCAL_MACHINE
    • HKEY_USERS
  • lpValueName:   键值的名称
  • Reserved:   保留位,置0
  • dwType:   键值的类型
  • lpData:   键值
  • cbData:   键值数据长度

删除键值 RegDeleteValue

函数原型

LONG RegDeleteValue(   HKEY hKey,            // handle to key   LPCTSTR lpValueName   // value name );

参数说明

  • hKey:   打开键的句柄或以下预定义句柄
    • HKEY_CLASSES_ROOT
    • HKEY_CURRENT_USER
    • HKEY_LOCAL_MACHINE
    • HKEY_USERS
  • lpValueName:   键值的名称

读取键值 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:   打开键的句柄或以下预定义句柄
    • HKEY_CLASSES_ROOT
    • HKEY_CURRENT_USER
    • HKEY_LOCAL_MACHINE
    • HKEY_USERS
  • lpValueName:   键值的名称
  • Reserved:   保留位,置0
  • lpType:   接收键值的类型
  • lpData:   接收键值
  • lpcbData:   接收键值数据长度

相关文献: RegSetValueEx用法 


注册表编程(利用注册表写开机启动程序)

执行流程

代码样例

创建键

程序源码:(链接)

运行结果:

删除键

程序源码:(链接)

运行结果:

修改/创建键值

程序源码:(链接)

运行结果:

读取键值

程序源码:(链接)

运行结果(读取"test"键值):

删除键值

程序源码:(链接)

运行结果:

程序源码

View Code

#include <windows.h> #include <iostream> #include <cstdlib> using namespace std;  void main() {     HKEY hKey;          LPCTSTR lpRun = "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);     //}       /*打开/修改键值********************************************************************/     ////打开键     //lRet= RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey);     //if(lRet == ERROR_SUCCESS)      //{          //    //创建或者修改键值     //    RegSetValueEx(hKey, "test",0,REG_SZ,(BYTE *)"success",10);     //         //    //关闭键         //    RegCloseKey(hKey);     //}       /*读取键值*************************************************************************/     ////打开键     //lRet= RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_READ, &hKey);     //if(lRet == ERROR_SUCCESS)      //{     //    sizeBuff = sizeof(reBuff);     //         //    //读取键值     //    if(RegQueryValueEx(hKey,"test",0,&dwtype,(BYTE*)reBuff,&sizeBuff) == ERROR_SUCCESS)     //        cout<<reBuff<<endl;     //         //    //关闭键     //    RegCloseKey(hKey);     //}       /*删除键值************************************************************************/     ////打开键     //lRet = RegOpenKeyEx(HKEY_CURRENT_USER, lpRun, 0, KEY_WRITE, &hKey);         //if(lRet==ERROR_SUCCESS)     //{     //    //删除键     //    RegDeleteValue(hKey,"test");     //         //    //关闭键     //    RegCloseKey(hKey);     //}       /*删除键**************************************************************************/     RegDeleteKey(HKEY_CURRENT_USER,lpRun);      system("pause"); }

 

利用注册表写开机启动程序

说明:

通过向注册表 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run 中添加键值来让程序在开机时被系统加载.

步骤:

  • 设置开机启动
      
  • 取消开机启动
      

程序源码:

View Code

//这里用的是宽字符,既 wchar_t  if(isStartOpen) {     //开机启动     HKEY hKey;          LPCTSTR lpRun = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";      //---------------找到系统的启动项      long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);     //-----------打开启动项Key       if(lRet == ERROR_SUCCESS)      {          wchar_t pFileName[MAX_PATH] = {0};          DWORD dwRet = GetModuleFileName(NULL, pFileName, MAX_PATH);         //----------------得到程序自身的全路径          lRet = RegSetValueEx(hKey, L"DeskPro",0,REG_SZ,(BYTE *)pFileName,dwRet*2);         //----------------添加或者修改注册表项         RegCloseKey(hKey);         //----------------关闭注册表     } }     else {     //取消卡机启动     HKEY hKey;          LPCTSTR lpRun = L"Software\\Microsoft\\Windows\\CurrentVersion\\Run";      //---------------找到系统的启动项      long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, lpRun, 0, KEY_WRITE, &hKey);     if(lRet==ERROR_SUCCESS)     {         RegDeleteValue(hKey,L"DeskPro");         //----------------删除注册表项         RegCloseKey(hKey);         //----------------关闭注册表     } }


from:http://www.cnblogs.com/kzloser/archive/2012/11/07/2758404.html#c0
时间: 2024-09-20 04:20:08

注册表操作(VC_Win32)的相关文章

注册表 应用程序路径-注册表操作:通过注册表来获取到一个应用程序的安装路径~!~!~!~!~!~!~!~!~!

问题描述 注册表操作:通过注册表来获取到一个应用程序的安装路径~!~!~!~!~!~!~!~!~! 10C C币快没有了,希望大神看到不要嫌弃赏金!!!!!!不吝赐教.... 解决方案 HKEY_LOCAL_MACHINEsoftwaremicrosoftwindowscurrentversionuninstall软件名,如果有,一般在这个里面 解决方案二: 你能找到某个软件的注册表 逐个点开 后面 '数据'那一列里面会有路径显示 解决方案三: 一个操作注册表的类 解决方案四: 操作?还是程序控

[C#]注册表操作

原文:[C#]注册表操作 概念 在介绍注册表操作前,有必要了解注册表的一些基本常识. 在此简要介绍一下.  注册表 注册表(Registry,繁体中文版Windows称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息.注册表组织层次结构的格式,基于存储在它的元素的逻辑顺序. 当将信息存储在注册表中,选择要存储的信息类型所基于的适当位置. 在Windows 3.x操作系统中,注册表是一个极小文件,其文件名为Reg.dat,里面只存放了某些文件类

C# 注册表 操作实现代码_C#教程

其中第二级目录包含了五个预定义主键分别是:HKEY_CLASSES_ROOT,HKEY_CURRENT_USER,HKEY_LOCAL_MACHINE,HKEY_USERS,HKEY_CURRENT_CONFIG. 下面我们来分别解释这5个类的作用 HKEY_CLASSES_ROOT该主键包含了文件的扩展名和应用程序的关联信息以及Window Shell和OLE用于储存注册表的信息.该主键下的子键决定了在WINDOWS中如何显示该类文件以及他们的图标,该主键是从HKEY_LCCAL_MACHIN

winfrom 注册表操作的问题

问题描述 winfrom 注册表操作的问题 判断下HKEY_LOCAL_MACHINESOFTWARExxxhc_Config key这个键值存不存在?我怎么把他拿出来 解决方案 http://www.aiweibk.com/2885.html

.Net的注册表操作

注册表 重要的类和操作: Microsoft.Win32.Registry : 提供访问注册表中的值和子项的基 Registrykeys, 主要的几个方法有 CurrentUser(对应注册表的HKEY_CURRENT_USER), LocalMachine(对应注册表的HKEY_LOCAL_MACHINE) Microsoft.Win32.RegistryKey :封装了对注册表项的操作. 常用的方法属性有: 1) 对项的操作: OpenSubKey, CreateSubKey, Delete

vbscript Registry 注册表操作实现代码(读写删除)_vbs

VBScript Code: 复制代码 代码如下: ' Create a WSH Shell object: Set wshShell = CreateObject( "WScript.Shell" ) ' ' Create a new key: wshShell.RegWrite "HKCU\TestKey\", "" ' Create a new DWORD value: wshShell.RegWrite "HKCU\TestKe

bat与注册表操作的方法分析[原创]_DOS/BAT

bat(批处理)操作注册表的方法,我知道的应该有两种1,结合用reg.exe实现读写注册表2,用bat输出文件,然后regedit /s 1.reg 这样的格式来实现 输出vbs等都是这种 echo cmd.exe /k dir c: > c:\windows\system32\1.bat reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Run" /v "test" /d "c:\win

完整的注册表操作实例 VBS脚本_vbs

①创建主键.创建各类型的键值. ②读取键值并分析键值类型. ③枚举主键及键值. ④判断键或键值是否存在. ⑤查询注册表键的操作权限. ⑥监视注册表根键.主键.键值,当发现变动时提示. 复制代码 代码如下: '''注册表查询/操作 On Error Resume Next Const HKEY_CLASSES_ROOT = &H80000000'''设置注册表5大根键,HKCR-----------① Const HKEY_CURRENT_USER = &H80000001'''HKCU C

注册表操作

注册表 Public Sub SaveSettings()        Dim parentKey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software", True)        Dim key As Microsoft.Win32.RegistryKey = parentKey.OpenSubKey(mcApplicationName, True)