vs2008环境下MFC对注册表的读写操作

来源:互联网 发布:sql中架构是什么意思 编辑:程序博客网 时间:2024/05/20 08:27

      最近修改一个在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;}

 

原创粉丝点击