如何自动化设置IE代理【转】【补充】

由于在实践中遇到需要自动设置代理服务器,使得使用更方便,把对这个问题研究的一些心得写下来,别人需要也可以参考下,自己时间长了忘了也可以翻看下。
    自动化地用程度设置IE代理服务器基本上可以有以下几个途径:
    1. 注册表导入。
    新建一个注册表文件,例如用以下为内容的注册表文件:
    Regedit4
    [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings]
    "MigrateProxy"=dword:00000001
    "ProxyEnable"=dword:00000001
    "ProxyHttp1.1"=dword:00000000
    "ProxyServer"="http://ProxyServername:80"
    "ProxyOverride"="<local>"
    导入文件后,注册表将被更改,但此时IE的代理并未更改,需要将所有的IE进程关掉再启动才能生效。这也是这种办法的一个不足之处。
    2. 调用InternetSetOption接口
    例程如下:
#include "stdio.h"
#include "windows.h"
#include "wininet.h"
#pragma comment(lib, "wininet.lib")
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   PSTR szCmdLine, int iCmdShow)
{
 //char buff[256] = "http=http://itgproxy:80";
 char buff[256]= "10.76.1.57:1437";
 int buffSize = MultiByteToWideChar(CP_ACP, 0, buff, -1, NULL, 0);
 LPWSTR proxy = new WCHAR[buffSize];
 MultiByteToWideChar(CP_ACP, 0, buff, -1, proxy, buffSize);
 INTERNET_PER_CONN_OPTION_LIST    List;
 INTERNET_PER_CONN_OPTION         Option[2];
 unsigned long                    nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
 
 Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER;
 Option[0].Value.pszValue = proxy;
 Option[1].dwOption = INTERNET_PER_CONN_FLAGS;
 Option[1].Value.dwValue = PROXY_TYPE_PROXY;
 Option[1].Value.dwValue |= PROXY_TYPE_DIRECT;
 // This option sets all the possible connection types for the client.
 // This case specifies that the proxy can be used or direct connection is possible.
// Option[2].dwOption = INTERNET_PER_CONN_PROXY_BYPASS;
// Option[2].Value.pszValue = "<local>";
 
 List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST);
 List.pszConnection = NULL;
 List.dwOptionCount = 2;
 List.dwOptionError = 0;
 List.pOptions = Option;
 if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize))
  printf("InternetSetOption failed! (%d)\n", GetLastError());
 InternetSetOption(NULL,INTERNET_OPTION_SETTINGS_CHANGED,NULL,NULL);
 InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL);
 //The connection settings for other instances of Internet Explorer.
 return 0;
}
    这种方法的好处在于运行后,代理即时生效。如果在程序里增加文件读写也可以使代理的设置可配置
  3. 这应当说是一种混合方法,先用注册表导入,再调用
InternetSetOption(NULL,INTERNET_OPTION_SETTINGS_CHANGED,NULL,NULL);
InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL);
这种方法看上去不是很纯洁,但也能达到即生效。而且有个好处是程序的编写变得很简单,对InternetSetOption的理解不需要多深入。
 
在java中调有C或C++产生出来的程序可以用Runtime.getRuntime().exec(exefile),这样就能在java中实再动态自动地设置IE的代理了。
 
以上内容转自:http://blog.sina.com.cn/s/blog_559d67ac0100qlah.html
 
 
INTERNET_OPTION_REFRESH = 37

Causes the proxy data to be reread from the registry for a handle. No buffer is required. This option can be used on the HINTERNET handle returned by InternetOpen. It is used byInternetSetOption.

 

INTERNET_OPTION_SETTINGS_CHANGED = 39

Notifies the system that the registry settings have been changed so that it verifies the settings on the next call to InternetConnect. This is used by InternetSetOption.

posted on 2013-03-22 01:09  圣光  阅读(519)  评论(0)    收藏  举报

导航