【C++】c++修改IE浏览器的Internet选项

windows开发经常会使用IE浏览器,例如Http编程。很多时候我们需要修改Internet选项中的cookies,高级设置,tls1.0 tls1.2之类的子项,这时可以使用修改注册表方法达到目的,微软内置软件多以注册表形式作为参数。问题又来了,注册表的选项纷繁复杂,里面的值代表什么意思?

下面教大家一个小技巧,在不知道修改项位置和数值含义的情况下,轻松找出目标并正确修改。

关于Internet选项注册表路径

Win+R呼出【运行】,输入 regedit 打开注册表工具,Internet选项在下面路径:
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]

举一个栗子:

修改Internet选项 - 高级,启用tls1.0 & tls1.1 & tls1.2。

首先,我也不知道启用1.0,1.1,1.2需要怎么设置,原本是只开启1.0  1.1的,禁止了1.2。

第一步

在默认值的情况下,打开上文路径Internet Settings注册表,右击选择导出,命名为reg01。

【C++】c++修改IE浏览器的Internet选项_第1张图片

 第二步

打开IE浏览器 - Internet选项 - 高级,手动把TLS1.2勾上,保存并关闭。再次导出Internet Settings注册表,命名为reg02。

第三步

打开文本对比工具,此处推荐一个在线对比网站 http://www.newjson.com/Static/Tools/Diff.html

导入reg01,reg02对比,发现 SecureProtocols数值改变了,由0x0280变成了0x0a80,其余数值没有变。便可以断定0x0a80就代表同时勾选TLS1.0  1.1  1.2。

【C++】c++修改IE浏览器的Internet选项_第2张图片

 注册表中对应的内容如下

【C++】c++修改IE浏览器的Internet选项_第3张图片

C++修改对应位置的注册表数值。

知道了修改项位置和数值内容,就可以coding了。c++代码如下

#include 
#include 
using namespace std;

HKEY OpenKey(HKEY hRootKey, wchar_t* strKey)
{
    HKEY hKey;
    LONG nError = RegOpenKeyEx(hRootKey, strKey, NULL, KEY_ALL_ACCESS, &hKey);

    if (nError==ERROR_FILE_NOT_FOUND)
    {
        cout << "Creating registry key: " << strKey << endl;
        nError = RegCreateKeyEx(hRootKey, strKey, NULL, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,NULL, &hKey, NULL);
    }

    if (nError)
        cout << "Error: " << nError << " Could not find or create " << strKey << endl;

    return hKey;
}

void SetVal(HKEY hKey, LPCTSTR lpValue, DWORD data)
{
    LONG nError = RegSetValueEx(hKey, lpValue, NULL, REG_DWORD, (LPBYTE)&data, sizeof(DWORD));

    if (nError)
        cout << "Error: " << nError << " Could not set registry value: " << (char*)lpValue << endl;
}

DWORD GetVal(HKEY hKey, LPCTSTR lpValue)
{
    DWORD data;        DWORD size = sizeof(data);    DWORD type = REG_DWORD;
    LONG nError = RegQueryValueEx(hKey, lpValue, NULL, &type, (LPBYTE)&data, &size);

    if (nError==ERROR_FILE_NOT_FOUND)
        data = 0; // The value will be created and set to data next time SetVal() is called.
    else if (nError)
        cout << "Error: " << nError << " Could not get registry value " << (char*)lpValue << endl;

    return data;
}

int main()
{
    // 打开Internet选项位置
    HKEY hKey = OpenKey(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings");
    DWORD vv = GetVal(hKey, L"SecureProtocols");  //0x0280
    vv = 2688; //0x0a80
    // 修改十进制数值
    SetVal(hKey, L"SecureProtocols", vv);
    RegCloseKey(hKey);
    
    return 0;
}

关于注册表编程,可以参考 https://www.cnblogs.com/john-h/p/5886870.html

举一反三

回看前面说的,如果想修改Internet选项的其他内容,只需要对比修改前后的regedit文本,找出对应项和对应数值。

这样,在不知道数值含义和参数位置情况下,也能轻松达到目的。

你可能感兴趣的:(【C++】c++修改IE浏览器的Internet选项)