當前位置:成語大全網 - 書法字典 - 如何用C語言讀取壹個Windows註冊表項?

如何用C語言讀取壹個Windows註冊表項?

這不屬於標準C++的範疇,調用windows api就行了。

Win 95和NT的註冊表是系統中非常重要的壹部分。Win32 API中有壹組Reg函數來處理這些問題。壹般的讀寫過程如下:

1.使用RegOpenKeyEx或RegCreateKeyEx函數打開或創建壹個密鑰;

2.如果上壹步成功,使用RegQueryValueEx讀取子項的值,使用RegSetValueEx設置子項,使用RegEnumKey獲取所有子項,使用RegDeleteKey刪除壹個項;

3.使用RegCloseKey在操作後關閉。

以下程序打開HKEY _當前_用戶\軟件\ zealsoft studio \ ask pro FTP \ last time項,然後讀取WOL子項的值。

HKEY HKEY;

char SZ[256];

DWORD dwtype,sl = 256

RegOpenKeyEx(HKEY _當前_用戶

"軟件\ \ Zeal soft studio \ \ ask pro FTP \ \ last time ",

NULL、KEY _ ALL _ ACCESS & amp;HKEY);

RegQueryValueEx(hkey,“WOL”,NULL & amp;dwtype,(LP byte)SZ & amp;sl);

RegCloseKey(HKEY);

MFC程序可以使用CRegKey類來讀寫註冊表。VB中調用API的方法,請參考QA000226《如何訪問Windows系統註冊表》。

打開註冊密鑰

LONG RegOpenKeyEx( HKEY hKey,//打開密鑰的句柄

LPCTSTR lpSubKey,//要打開的子項名稱的地址

DWORD ulOptions,// reserved =0

REGSAM samDesired,//安全訪問掩碼

PHKEY phkResult //打開密鑰的句柄的地址

);

示例:

HKEY高清;

hd = HKEY _ LOCAL _ MACHINE

char * regkey name = " SoftWare \ \ xy 123 \ \ Poker \ \ ";

LONG a=RegOpenKeyEx(hd,Regkeyname,0,KEY_READ,& amp高清);//ERROR_SUCCESS成功返回,否則返回錯誤代碼。

關閉註冊密鑰

LONG RegCloseKey( HKEY hKey //要關閉的鍵的句柄);

示例:

RegCloseKey(HKEY _ LOCAL _ MACHINE);

或者:RegCloseKey(高清);

創建註冊密鑰

LONG RegCreateKeyEx( HKEY hKey,//打開密鑰的句柄

LPCTSTR lpSubKey,//子項名稱的地址

雙字保留,//保留=0

LPTSTR lpClass,//類字符串的地址

DWORD dwOptions,//特殊選項標誌

REGSAM samDesired,//所需的安全訪問

LP security _ ATTRIBUTES lpSecurityAttributes,//密鑰安全結構的地址

PHKEY phkResult,//打開句柄的緩沖區地址

LPDWORD lpdwDisposition //處置值緩沖區的地址);

示例:

char * sclass =//指定的類名為空。

DWORD nbf = 0;//接受返回值,指示是創建新項還是打開現有項。(REG_OPENED_EXISTING_KEY總是在測試後返回。

LONG II=RegCreateKeyEx(hd,Regkeyname,0,sclass,REG_OPTION_NON_VOLATILE,

KEY_READ|KEY_WRITE,NULL & amp;高清& ampnbf);

//REG_OPTION_NON_VOLATILE表示該項被永久保留。安全結構指示NULL,並自動獲得默認值。

//ERROR_SUCCESS成功返回,否則返回錯誤代碼。

枚舉鍵值

LONG RegEnumValue( HKEY關鍵字,//要查詢的關鍵字的句柄

DWORD dwIndex,//要查詢的值的索引

LPTSTR lpValueName,//值字符串的緩沖區地址

LPDWORD lpcbValueName,//值緩沖區大小的地址

LPDWORD lpReserved,// reserved =NULL

LPDWORD lpType,//類型代碼的緩沖區地址

LPBYTE lpData,//值數據的緩沖區地址

LPDWORD lpcbData //數據緩沖區大小的地址);

示例:

DWORD dinx = 0;

char value name[70];//分配數字名稱緩沖區

strcpy(valuename," desk pattern ");//指定任意鍵名。

DWORD nsize = 69//數字名稱緩沖區大小

DWORD k = REG _ SZ//指示數據類型。

無符號字符變量[70];//分配數值緩沖區

DWORD ncbvari = 69//數字緩沖區大小

dinx = 0;//從0開始

while((II=RegEnumValue(hd,dinx,valuename,& ampnsize,NULL & amp;k、vari和ampncbvari))

!=錯誤_否_更多項目)

{

dinx++;//index +1,準備取下壹個值

nsize = 69//恢復原始大小

ncbvari = 69

}

成功後返回值為0,變量設置如下:

Valuename=數字名稱,以0結尾;如桌面顏色

Nsize=數字名稱的長度,9

K=REG_SZ DeskColor的類型是REG_SZ。

Vari=鍵值,32768 DeskColor= "32768 ",

Ncbvari=密鑰長度REG_SZ,包括結尾0,=6,

讀取鍵值

LONG RegQueryValueEx( HKEY hKey,//要查詢的鍵的句柄

LPTSTR lpValueName,//要查詢的值的名稱的地址

LPDWORD lpReserved,//保留

LPDWORD lpType,//值類型的緩沖區地址

LPBYTE lpData,//數據緩沖區的地址

LPDWORD lpcbData //數據緩沖區大小的地址);

示例:

RegQueryValueEx(hd,valuename,NULL,& ampk、vari和ampncbvari);

變量的定義和成功後各變量的設定值與RegEnumValueEx相同。

寫入鍵值

LONG RegSetValueEx( HKEY hKey,//要為其設置值的鍵的句柄

LPCTSTR lpValueName,//要設置的值的名稱

雙字保留,//保留

DWORD dwType,//值類型的標誌

常量字節*lpData,//值數據的地址

DWORD cbData //值數據的大小);

示例:

strcpy(valuename," Hello ");

無符號字符變量[10];

DWORD k = REG _ SZ

strcpy((char*)vari," 1234567 ")

RegSetValueEx(hd,valuename,0,k,vari,7);

成功後,在撲克下添加壹個鍵值Hello: REG_SZ: 1234567。

寫壹個整數變量:

int hi = 8;

RegSetValueEx(pj,valuename,0,REG_BINARY,(unsigned char *)& amp;hi,sizeof(int));

成功後,在Poker下添加壹個鍵值Hello2: REG_BINARY :08 00 00 00。

void AddEventSource()

{

HKEY香港;

DWORD dwData

烏查爾·什布夫[80];

//將您的源名稱作為子項添加到應用程序下

EventLog註冊表項中的項。

if(RegCreateKey(HKEY _ LOCAL _ MACHINE,

"系統\ \當前控制集\ \服務\

\ \ event log \ \ Application \ \ sample app ",& amp香港))

ErrorExit("無法創建註冊表項。");

//設置消息文件的名稱。

strcpy(szBuf," % SystemRoot % \ \ System \ \ sampl app . dll ");

//將名稱添加到EventMessageFile子項中。

if (RegSetValueEx(hk,//子項句柄

" EventMessageFile ", //值名稱

0,//必須為零

REG_EXPAND_SZ,//值類型

(LPBYTE) szBuf,//指向數值數據的指針

strlen(szBuf) + 1)) //值數據的長度

ErrorExit("無法設置事件消息文件。");

//在TypesSupported子項中設置支持的事件類型。

dwData =事件日誌錯誤類型|事件日誌警告類型|

事件日誌_信息_類型;

if (RegSetValueEx(hk,//子項句柄

" TypesSupported ", //值名稱

0,//必須為零

REG_DWORD,//值類型

(LP byte)& amp;dwData,//指向值數據的指針

sizeof(DWORD))//值數據的長度

ErrorExit("無法設置支持的類型。");

RegCloseKey(香港);

}

以下代碼將註冊表引導shell的鍵值重寫為c:\ dk 1 \ ATM \ harp \ exatmshell . exe:

HKEY HKEY;

長res

DWORD數據類型= REG _ SZ

無符號字符SZ value[_ MAX _ PATH];

strcpy((char*)szvalue," C:\ \ dk 1 \ \ ATM \ \ HARP \ \ exatmshell . exe ");

RES =::RegOpenKeyEx(HKEY _ LOCAL _ MACHINE,

"軟件\ \ Microsoft \ \ Windows NT \ \當前版本\\Winlogon\\ ",0,

密鑰寫入|密鑰讀取。HKEY);

if(res!=錯誤_成功)

{

AfxMessageBox(" AAA ");

返回;

}

res = ::RegSetValueEx(hkey," Shell ",0,datatype,szvalue,strlen(LPCSTR(SZ value)));

RegCloseKey(HKEY);

if(res==ERROR_SUCCESS)

* AfxMessageBox("您已成功將註冊表引導shell的鍵值設置為c:\ \ dk 1 \ \ ATM \ \ harp \ \ exact shell . exe ");

其他

* AfxMessageBox("設置失敗:目標位置不存在這樣的鍵!");