使用 Windows API 设置 IE 代理

设置 IE 代理有多种方法。常用的是修改注册表和调用 InternetSetOption API 。

1. 注册表

IE 设置在注册表中所在的位置是
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings
其中:

  • ProxyServer
    Value Type: REG_SZ
    Value Data: “ProxyServerName:Port”

  • ProxyEnable
    Value Type: REG_DWORD
    Value Data: 0 = Disable 1 = Enable

  • ProxyOverride 不使用代理的地址的列表
    Value Type: REG_SZ
    Value Data: “list_of_exclusion” 。可以使用通配符 * . 使用分号 ; 分隔, 如 192.168.1.*;*.domain.com;<local>

2. 使用 Windows API

示例代码如下 :

1
2
3
4
5
6
7
8
9
10
11
INTERNET_PER_CONN_OPTION_LIST List;
INTERNET_PER_CONN_OPTION Option[1];
unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
Option[0].dwOption = INTERNET_PER_CONN_FLAGS;
Option[0].Value.dwValue = PROXY_TYPE_DIRECT;
List.dwSize = nSize;
List.pszConnection = NULL;
List.dwOptionCount = 1;
List.dwOptionError = 0;
List.pOptions = Option;
BOOL setopts = InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize);

关于更多的信息请 参考这里 docs.microsoft.com

3.Others

a. 注意事项

在 IE9 之前, 以上步骤之后可能需要重启 IE 才能使设置生效。或者在打开 “Internet 属性” 面板时设置不生效。此时需要:

1
2
InternetSetOption(0, INTERNET_OPTION_SETTINGS_CHANGED, 0, 0);
InternetSetOption(0, INTERNET_OPTION_REFRESH, 0, 0);

来通知其它应用IE属性被修改。

b. 打开 “Internet 属性” 设置面板

Rundll32.exe shell32.dll,Control_RunDLL inetcpl.cpl,,4
Rundll32 可以做很多事情。具体可以看这里 List of Rundll32 Commands in Windows 10