1. 程式人生 > 程式設計 >C/C++讀寫登錄檔中二進位制資料(程式碼示例)

C/C++讀寫登錄檔中二進位制資料(程式碼示例)

1、RegOpenKeyEx 函式:

原形:

LONGRegOpenKeyEx(
HKEYhKey,//要開啟主鍵名
LPCTSTRlpSubKey,// 需要開啟的子鍵或路徑
DWORDulOptions,//保留,為0
REGSAMsamDesired,//操作許可權標誌
PHKEYphkResult//指向你開啟鍵的控制代碼 (通過指標返回)
);

返回值:不成功返回非0,成功返回ERROR_SUCCESS.
解釋:該函式負責開啟指定的鍵或子鍵,如果不存在他不建立。

檢視微軟官方文件:http://msdn.microsoft.com/zh-cn/aa912084

2、RegSetValueEx函式:

原形:

LONGRegSetValueEx(
HKEYhKey,//已開啟的鍵的控制代碼
LPCTSTRlpValueName,//要查詢值的名稱,傳如\"\"為查詢鍵下的預設值
DWORDReserved,//保留
DWORDdwType,//寫入鍵值的型別
CONSTBYTE*lpData,//變數資料的地址
DWORDcbData//變數的長度
);

返回值:不成功返回非0,成功返回ERROR_SUCCESS
解釋:設定某子鍵下特定名稱的值。

檢視微軟官方文件:http://msdn.microsoft.com/zh-cn/aa916717#

3、RegQueryValueEx函式:

原形:

LONGRegQueryValueEx(
HKEYhKey,//已開啟的鍵的控制代碼
LPTSTRlpValueName,//要查詢值的名稱,傳如\"\"為查詢鍵下的預設值
LPDWORDlpReserved,//保留,為0
LPDWORDlpType,//查詢的型別
LPBYTElpData,//資料存放的地址
LPDWORDlpcbData//資料長度+1
);

返回值:不成功返回非0,成功返回ERROR_SUCCESS
解釋:讀取某子鍵下特定名稱的值。

檢視微軟官方文件:http://msdn.microsoft.com/zh-cn/aa914692

寫入二進位制資料程式碼示例:

# include <windows.h>
# include <tchar.h>
 
int main(void)
{
	HKEY hKey;
	HKEY rootKey = HKEY_CURRENT_USER;
	TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"
					 "\\MenuOrder\\Start Menu2\\Programs\\test";
	TCHAR * keyValue = "c:\\test.exe";
	long openReg;
	long setRegValue;
	DWORD dwType = REG_BINARY;
	BYTE value[256] = "c:\\test.exe";
	openReg = RegOpenKeyEx(rootKey,subKey,KEY_WRITE,&hKey);
	if (openReg == ERROR_SUCCESS)
	{
		setRegValue = RegSetValueEx(hKey,_T("order"),dwType,value,256);
		if (setRegValue == ERROR_SUCCESS)
		{
			MessageBox(NULL,_T("Write Sucess"),_T("call"),MB_OK);
		}
		else
		{
			MessageBox(NULL,_T("Write Fail"),MB_OK);
		}
		RegCloseKey(hKey);
	}
	return 0;
}

讀取二進位制資料的程式碼示例:

# include <windows.h>
# include <tchar.h>
 
int main(void)
{
	HKEY hKey;
	HKEY rootKey = HKEY_CURRENT_USER;
	TCHAR * subKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"
					 "\\MenuOrder\\Start Menu2\\Programs\\test";
	long openRegResult;
	long readRegResult;
	DWORD dwType = REG_BINARY;
	REGSAM mode = KEY_READ;
	BYTE value[256] = {0};
	DWORD length = 256;
	openRegResult = RegOpenKeyEx(rootKey,mode,&hKey);
	if (ERROR_SUCCESS == openRegResult)
	{
		readRegResult = RegQueryValueEx(hKey,&dwType,&length);
		if (ERROR_SUCCESS == readRegResult)
		{
			MessageBox(NULL,_T(value),_T("ERROR"),MB_OK);	
		}
	}
	RegCloseKey(hKey);
	return 0;
}

注:讀寫其他型別的登錄檔鍵值與上述的類似,不單獨講解了。