VC++ 中對註冊表的操作
作者:lixiaosan
日期:04/29/2006
這裡只是對註冊表的幾個api函數的使用簡介。在MFC中,你可以使用CRegKey類操作註冊表,關於CRegKey類在這裡就不做介紹了,可以參考msdn。
以下代碼實現了在HKEY_LOCAL_MACHINE的SOFTWARE下開啟MyProgram鍵,如果MyProgram不存在,則建立之,存在則進行查詢
HKEY hKEY;
HKEY hKEYResult;
LPCTSTR lpszSubKey;
LPCTSTR lpszValueName;
LONG ret;
DWORD dwType;
DWORD dwSize;
hKEY = HKEY_LOCAL_MACHINE;
lpszSubKey = _T("SOFTWARE//MyProgram");
ret = RegOpenKeyEx(
hKEY, // 根鍵
lpszSubKey, // 子鍵
0, // 必須為0
KEY_ALL_ACCESS, // 存取權限
&hKEYResult); // 儲存開啟的鍵的控制代碼
if (ret != ERROR_SUCCESS) // 若開啟失敗,則進行建立
{
ret = RegCreateKeyEx(
hKEY, // 根鍵
lpszSubKey, // 子鍵
0, // 必須為0
NULL, // 鍵的class
REG_OPTION_NON_VOLATILE, // 永久保持
KEY_READ|KEY_WRITE, // 存取權限
NULL, // 安全屬性
&hKEYResult, // 儲存開啟的鍵的控制代碼
NULL);
if (ret != ERROR_SUCCESS)
{
MessageBox(_T("Create failed!"));
RegCloseKey(hKEYResult); // 使用完記得關閉控制代碼
return;
}
else
{
lpszValueName = _T("Number");
DWORD dwNumber = 10;
ret = RegSetValueEx(
hKEYResult, // 開啟的控制代碼
lpszValueName, // 鍵名
0, // 必須為0
REG_DWORD, // 鍵類型
(CONST BYTE*)&dwNumber, // 需儲存的資料
sizeof(DWORD)); // 資料長度
lpszValueName = _T("Date");
LPCTSTR lpszDate = _T("2006/4/29");
ret = RegSetValueEx(
hKEYResult,
lpszValueName,
0,
REG_SZ,
(CONST BYTE*)lpszDate,
MAX_PATH);
RegCloseKey(hKEYResult);
}
}
else // 如開啟成功,則進行查詢
{
lpszValueName = _T("Number");
dwType = REG_DWORD;
DWORD dwRes = 0;
dwSize = sizeof(DWORD);
ret = RegQueryValueEx(
hKEYResult, // 開啟的控制代碼
lpszValueName, // 尋找的鍵名
0, // 必須為0
&dwType, // 鍵類型
(BYTE*)&dwRes, // 返回的資料
&dwSize); // 資料長度
if (ret != ERROR_SUCCESS)
{
MessageBox(_T("Create failed!"));
RegCloseKey(hKEYResult);
return;
}
lpszValueName = _T("Date");
dwType = REG_SZ;
dwSize = MAX_PATH;
BYTE *pByteSubKey = new BYTE[MAX_PATH];
ZeroMemory(pByteSubKey, MAX_PATH);
ret = RegQueryValueEx(
hKEYResult,
lpszValueName,
0,
&dwType,
pByteSubKey,
&dwSize);
RegCloseKey(hKEYResult);
delete []pByteSubKey;
pByteSubKey = NULL;
if (ret != ERROR_SUCCESS)
{
MessageBox(_T("Create failed!"));
RegCloseKey(hKEYResult);
return;
}
}