通过程序修改注册表键值来达到修改IE配置参数的目的


      使用IE访问应用程序或网页时经常需要设置一些选项(工具-Internet 选项),比如为了避免缓存网页,把工具-Internet选项-常规选项卡-Internet临时文件-设置,检查所存网页的较新版本设置成:每次访问此页时检查(IE6)。这些操作都可以通过界面完成,但有时为了方便需要在程序中统一对某些选项进行设置。我们都知道操作系统和应用软件的一些配置相关信息都需要保存在文件当中使其永久生效,这些信息保存的位置就是注册表,注册表相当于操作系统的一个数据库。同样IE的一些配置信息也是在注册表中存储,修改IE的配置就可以通过修改器对应的注册表变量值来实现,当然也可以通过IE对应的Windows API接口函数进行修改,但最终都会反映在注册表中,因此通过修改IE注册表键值来达到修改IE配置的目的。下面就以上面提到为例(工具-Internet选项-常规选项卡-Internet临时文件-设置,检查所存网页的较新版本设置成:每次访问此页时检查)说明一下修改过程:

      从网络上收集了一些IE配置参数与注册表变量对应关系的信息,大都说的比较粗略,只是对几个主要的选项设置进行了说明,上面的选项需要修改哪个注册表键值没有说明,但是可以大体了解到IE配置信息在注册表中存放的位置:
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings
HKEY_CURRENT_USER/Software/Microsoft/Internet Explorer
HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Internet Explorer

      于是想到把这3个位置对应的值全部导出,然后修改IE的设置后再导出一次,通过文本编辑工具(UltraEdit)对比两次导出的文件差异,会发现有一些不通的地方,通过观察分析发现HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings位置有个项目SyncMode5两个文件对应的值不一样,分别为:dword:00000004 和 dword:00000003 ,为了尽一步验证判断是否准确再对IE选项重新设定发现SyncMode5随着变化,经过试验发现 IE检查所存网页的较新版本各选项对应关系如下:
 
SyncMode5值    IE检查所存网页的较新版本
3              每次访问此页时检查
2              每次访问Internet Explore时检查
4              自动
0              不检查

因此可以通过修改注册表键值来达到修改IE配置参数的目录,修改后生效前需要重启IE,顺便把修改注册表变量值和重启IE的代码添加上(VC++ 6.0)。
修改注册表变量:

DWORD typeKey = REG_DWORD ; DWORD keyValue = 3 ; //SyncMode5键值设置成3 HKEY hkeyIE; LPCTSTR lpstrSyncMode5 ="Software//Microsoft//Windows//CurrentVersion//Internet Settings//"; long ret1 = -1 ; ret1 = ::RegOpenKeyEx(HKEY_CURRENT_USER , lpstrSyncMode5 , 0, KEY_WRITE, &hkeyIE) ; if(ret1 != ERROR_SUCCESS) { ::MessageBox(NULL, "Error", "Error", NULL); return ; } ret1=::RegSetValueEx( hkeyIE , "SyncMode5", NULL,typeKey,(LPBYTE) &keyValue, sizeof(DWORD) ); if(ret1!=ERROR_SUCCESS) { return ; }
关闭IE,然后重新启用一个IE:
#include HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 pe; HANDLE hd ; pe.dwSize = sizeof(PROCESSENTRY32); if (!Process32First(hSnapshot, &pe)) { return ; } while (Process32Next(hSnapshot, &pe)) { if ( strcmp("IEXPLORE.EXE", pe.szExeFile) == 0 ){ ::MessageBox(NULL, pe.szExeFile, pe.szExeFile, NULL); hd = OpenProcess(PROCESS_ALL_ACCESS,TRUE,pe.th32ProcessID); if( hd != NULL ) { Sleep(200); TerminateProcess(hd,0); } } }

 

你可能感兴趣的:(通过程序修改注册表键值来达到修改IE配置参数的目的)