(本章节中例子都是用 VS2005 编译调试的)
概述
注册表是windows操作系统中的一个核心数据库,其中存放着各种参数,直接控制着windows的启动、硬件驱动程序的装载以及一些windows应用程序的运行,从而在整个系统中起着核心作用.这些作用包括了软、硬件的相关配置和状态信息,比如注册表中保存有应用程序和资源管理器外壳的初始条件、首选项和卸载数据等,联网计算机的整个系统的设置和各种许可,文件扩展名与应用程序的关联,硬件部件的描述、状态和属性,性能记录和其他底层的系统状态信息,以及其他数据等.
数据结构
注册表由键(或称"项")、子键(子项)和值项构成.一个键就是分支中的一个文件夹,而子键就是这个文件夹中的子文件夹,子键同样是一个键.一个值项则是一个键的当前定义,由名称、数据类型以及分配的值组成.一个键可以有一个或多个值,每个值的名称各不相同,如果一个值的名称为空,则该值为该键的默认值.
数据类型
注册表的数据类型主要有以下四种:
显示类型(在编辑器中) 数据类型 说明
REG_SZ 字符串 文本字符串
REG_MULTI_SZ 多字符串 含有多个文本值的字符串
REG_BINARY 二进制数 二进制值,以十六进制显示.
REG_DWORD 双字 一个32位的二进制值,显示为8位的十六进制值.
各主键的简单介绍
[创建键][打开键][删除键][添加/修改键值][删除键值][读取键值]
函数原型
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 );
参数说明
函数原型
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 );
参数说明
函数原型
LONG RegDeleteKey( HKEY hKey, // handle to open key LPCTSTR lpSubKey // subkey name );
参数说明
函数原型
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 );
参数说明
函数原型
LONG RegDeleteValue( HKEY hKey, // handle to key LPCTSTR lpValueName // value name );
参数说明
函数原型
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 );
参数说明
相关文献: RegSetValueEx用法
执行流程
代码样例
创建键
程序源码:(链接)
运行结果:
删除键
程序源码:(链接)
运行结果:
修改/创建键值
程序源码:(链接)
运行结果:
读取键值
程序源码:(链接)
运行结果(读取"test"键值):
删除键值
程序源码:(链接)
运行结果:
#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 中添加键值来让程序在开机时被系统加载.
步骤:
程序源码:
//这里用的是宽字符,既 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); //----------------关闭注册表 } }