一、提出问题
你是否有过这样的痛苦经历:不知什么时候IE主页被修改,想该回去的时候可是发现地址栏已经被锁定,该不了!于是想通过注册表来恢复,可是输入”regedit”回车后,却弹出“注册表已被管理员停用”!是不是很郁闷?
其实,这都是上网的时候中了病毒而造成了。恢复注册表有很多方法,这里我介绍如何用Visual C++编程来解决。
二、分析问题:
注册表被锁定是由于
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/System下的DWORD值“DisableRegistryTools”被修改为“1”的缘故,将其键值恢复为“0”,或者直接删除该项即可恢复注册表的使用。
IE首页被锁定则是由于在注册表编辑器中
HKEY_CURRENT_USER/Software/Policies/Microsoft/ Internet Explorer/Control Panel。
”HomePage”的值被改为“1”,解决的办法是将其改为”1”或直接删除该键值项,再重新打开“Internet属性”就可以更改主页设置了。
三、解决问题
首先要介绍将要甬道的几个操作注册表的API函数。(只给出函数的功能,具体参数和用法可参考MSDN或相关的书籍)
RegOpenKeyEx() 打开一个指定键
RegDeleteValue() 在注册表中从一个键中删除一个值
RegSetValueEx() 向一个打开的注册表的键中存储数据
RegCloseKey() 关闭打开的注册表句柄
1、打开Visual C++,建立一个对话框程序Reg. 添加四个按扭控件:
资源ID 标题 IDC_LOCKREG 锁定注册表 IDC_UNLOCKREG 解除锁定 IDC_LOCKHOMEPAGE 锁定IE主页 IDC_UNLOCKHOMEPAGE 解除锁定
2、双击ID为IDC_UNLOCKREG的按扭,添加消息处理函数:
void CRegDlg::OnUnlockReg()
{
HKEY hkey;
LPCTSTR strSubKey="Software//Microsoft//Windows//CurrentVersion//Policies//system",
if(::RegOpenKeyEx(HKEY_CURRENT_USER,
strSubKey,
0,
KEY_READ|KEY_WRITE,
&hkey) !=ERROR_SUCCESS)
return;
if(::RegDeleteValue(hkey,"DisableRegistryTools") !=ERROR_SUCCESS)
return ;
else
MessageBox(“你已经成功解除了注册表的锁定”,”恭喜你”,MB_OK |
MB_ICONINFORMATION);
::RegCloseKey(hkey);
}
3、双击ID为IDC_UNLOCKHOMEPAGE的按扭添加消息处理函数:
void CRegDlg:: OnUnlockhomepage()
{
HKEY hkey;
LPCTSTR strSubKey="Software//Policies//Microsoft//Internet Explorer//Control Panel",,
if(::RegOpenKeyEx(HKEY_CURRENT_USER,
strSubKey,
0,
KEY_READ|KEY_WRITE,
&hkey) !=ERROR_SUCCESS)
return;
DWORD dwValue=0;
if(::RegSetValueEx(hkey,
"HomePage",
NULL,
REG_DWORD,
(LPBYTE)&dwValue, //LPBYTE即unsigned char*
sizeof(DWORD) ) !=ERROR_SUCCESS)
{
MessageBox("设置注册表相关键值失败","错误",MB_OK|MB_ICONEXCLAMATION);
return;
}
else
MessageBox("你已经成功地解除了IE主页的锁定","恭喜你",MB_OK|MB_ICONINFORMATION);
::RegCloseKey(hkey);
}
4、锁定注册表”和“锁定IE主页”的功能不通过用API函数操作注册表来完成,而是编写两个注册表文件,然后导入注册表实现。
建立DisableRegistryTools.reg文件,内容如下:
REGEDIT4
[HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Policies/System/]
"DisableRegistryTools"=dword:00000001
建立LockHomePage.reg文件,内容如下:
REGEDIT4
[HKEY_CURRENT_USER/Software/Policies/Microsoft/Internet Explorer/Control Panel]
"HomePage"=dword:00000001
5、然后添加消息处理函数:
void CRegDlg::OnLock()
{
::ShellExecute(GetSafeHwnd(),"open",” DisableRegistryTools.reg”,NULL,"",SW_SHOW);
}
void CRegDlg::OnLockHomepage()
{
::ShellExecute(GetSafeHwnd(),"open","LockHomePage.reg",NULL,"",SW_SHOW);
}
四、经验总结
好了,现在编译链接便可运行了,有了这个小程序,你从此就不用再害怕这些雕虫小技了。本程序在Windows XP, Visual C++ 6.0环境下调试通过