注册表的查:
void CMyMFCDlg::OnBnClickedButton1Cpu()
{
//第一种
//读取键所对应得值
//HKEY hkey;
//wchar_t reg_value[64];
//if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0"), 0, KEY_QUERY_VALUE, &hkey) == ERROR_SUCCESS) {
// //打开成功了,接下来就是进行读取的操作
// DWORD reg_value_size = sizeof(reg_value);
// if (RegQueryValueEx(hkey, _T("ProcessorNameString"), NULL, NULL, (LPBYTE)reg_value, ®_value_size) == ERROR_SUCCESS) { //读取的值放到reg_value缓冲区中
// SetDlgItemText(IDC_STATIC_CPU, reg_value);
// }
// else {
// AfxMessageBox(_T("读取注册表失败!"));
// }
//}
//else {
// AfxMessageBox(_T("打开注册表失败!"));
//}
//RegCloseKey(hkey);
// -----------------------------------------------------------------
// 第二种就是直接读取键的名称
LONG reg_bufsize;
RegQueryValue(HKEY_CURRENT_USER, _T("aaa"), NULL, ®_bufsize);//动态获取这个aaa键的大小
wchar_t * reg_buf = new wchar_t[reg_bufsize]; //堆区生成存储空间存放键的名称
RegQueryValue(HKEY_CURRENT_USER, _T("aaa"), reg_buf, ®_bufsize);//获取键的名称放入reg_buf堆栈缓冲区中
AfxMessageBox(reg_buf);
}
注册表的增:
void CMyMFCDlg::OnBnClickedButton2() //创建键值
{
HKEY hkey; //打开指定子键
DWORD lRet;
DWORD dispo = REG_OPENED_EXISTING_KEY;
if ((lRet = RegCreateKeyEx(
HKEY_LOCAL_MACHINE,
_T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
0,
NULL,
REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,
NULL,
&hkey,
&dispo)) == ERROR_SUCCESS) {
wchar_t szModule[MAX_PATH];
GetModuleFileName(NULL, szModule, MAX_PATH); //得到当前执行文件的文件名(包含路径)
//创建一个新的键值,设置键值数据为文件
if ((lRet = RegSetValueEx(hkey, _T("SelfRunDemo"), 0, REG_SZ, (BYTE*)szModule, sizeof(szModule))) == ERROR_SUCCESS) {
SetDlgItemText(IDC_STATIC_CPU, _T("RegSetValueEx成功!")); //设置成功;
}
else {
SetDlgItemText(IDC_STATIC_CPU, _T("RegSetValueEx失败!")); //设置成功;
}
}
else {
SetDlgItemText(IDC_STATIC_CPU, _T("RegCreateKeyEx失败!")); //设置成功;
}
RegCloseKey(hkey); //关闭子键句柄
//下面这段代码是编程论坛版主给我的例子,FormatMessageA可以用来调试lRet返回值的原因
//HKEY hkey;
//DWORD lRet = RegCreateKeyEx(HKEY_LOCAL_MACHINE, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
// 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkey, NULL);
//if (lRet == ERROR_SUCCESS)
//{
// AfxMessageBox(_T("OK"));
// RegCloseKey(hkey);
//}
//else
//{
// wchar_t * pMsgBuf;
// FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS
// , NULL, lRet, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR)&pMsgBuf, 0, NULL);
// AfxMessageBox(pMsgBuf);
// LocalFree(pMsgBuf);
//}
}
注册表的删:
void CMyMFCDlg::OnBnClickedButton1()
{
/*
LSTATUS RegDeleteKeyA(
HKEY hKey,
LPCSTR lpSubKey
);
*/
RegDeleteKey(HKEY_CURRENT_USER, _T("aaa"));
AfxMessageBox(_T("删除键成功"));
}