注册表操作(VC_Win32)
注冊表操作(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;
}
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生
總結
以上是生活随笔為你收集整理的注册表操作(VC_Win32)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC树控件的简单使用
- 下一篇: C++开发中的pImpl方法