最近修改一个在vs2008环境下的MFC project,其中用到对注册表的读写操作,虽然在网上down了不少代码也查阅了不少文章,但运行始终存在不少问题,现把我运行成功的代码分享出来,希望对有需要的有些帮助,代码如下:
代码是在HKEY_LOCAL_MACHINE//Software//Microsoft//Windows//CurrentVersion//Run下添加一条开机自动运行的exe文件。
//写注册表
void CDevListDlg::WriteRegedit() { HKEY sub; TCHAR bufname[MAX_PATH*2]={0}; GetModuleFileName(0,bufname,MAX_PATH); CString str; str.Format(TEXT("%s"),bufname); CString skey=TEXT("Software//Microsoft//Windows//CurrentVersion//Run"); wchar_t *commStr =str.AllocSysString(); RegCreateKey(HKEY_LOCAL_MACHINE,skey,&sub); long iRet = RegSetValueEx(sub,TEXT("DeviceList"),NULL,REG_SZ,(const BYTE*)commStr,MAX_PATH*2); if(ERROR_SUCCESS == iRet) { MessageBox(TEXT("Add Regedit Success!"),NULL,MB_OK); } }
//把上面写入的删除掉
void CDevListDlg::DeleteRegVal()
{
HKEY hKey;
LPCTSTR lpRun = TEXT("Software//Microsoft//Windows//CurrentVersion//Run");
long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpRun,0,KEY_WRITE,&hKey);
if(lRet == ERROR_SUCCESS)
{
lRet = RegDeleteValue(hKey, TEXT("DeviceList"));
if(ERROR_SUCCESS == lRet)
{
MessageBox(TEXT("Delete Regedit Success!"),NULL,MB_OK);
}
RegCloseKey(hKey);
}
}
//读注册表花了我很长时间
long CDevListDlg::OnQuery() { UpdateData(true); HKEY hKey; DWORD KeyType; DWORD DataSize; LPCTSTR data_set = TEXT("Software//Microsoft//Windows//CurrentVersion//Run"); long ret0=(::RegOpenKeyEx(HKEY_LOCAL_MACHINE,data_set,0,KEY_READ,&hKey)); if(ret0!=ERROR_SUCCESS) { AfxMessageBox(TEXT("Error:cannot open hKEY")); } long ret1= RegQueryValueEx(hKey,L"DeviceList",0,&KeyType,NULL,&DataSize); if(ret1==ERROR_SUCCESS) { return ret1; } RegCloseKey(hKey); UpdateData(false); return -1; }