這裡只是對注冊表的幾個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("SOFTWAREMyProgram");
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;
}
}