博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程设置IE代理的几种方式
阅读量:5766 次
发布时间:2019-06-18

本文共 3883 字,大约阅读时间需要 12 分钟。

编程设置IE代理有几种方式,看到最多的一种方式就是修改IE代理相关的注册表项,CodeProject上有使用这种方法完整的例子:“”和“”,一个是C#的,一个是vc++的程序。

第二种方法是使用WMI管理VBS脚本,WMI的类的方法SetProxySetting可以设置代理服务器名称和端口:

Set objWMIService = GetObject("winmgmts:\\.\root\CIMV2")   Set objproxy = objWMIService.Get("Win32_Proxy.ServerName='localhost'")    objproxy.SetProxySetting "127.0.0.1","8087"

使用WMI脚本可以设置代理,但是无法禁止或者启用代理。

第三种方法就是直接使用WINAPI,在Wininet.dll中提供了函数InternetQueryOption()查询IE的配置,函数InternetSetOption()来更改IE的配置,下面是一段切换IE代理的C++程序,参照:

#include 
#include
#include
#include
#include
BOOL QueryProxy(){ BOOL ret=FALSE; INTERNET_PER_CONN_OPTION_LIST List; INTERNET_PER_CONN_OPTION Option[5]; unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); Option[0].dwOption = INTERNET_PER_CONN_AUTOCONFIG_URL; Option[1].dwOption = INTERNET_PER_CONN_AUTODISCOVERY_FLAGS; Option[2].dwOption = INTERNET_PER_CONN_FLAGS; Option[3].dwOption = INTERNET_PER_CONN_PROXY_BYPASS; Option[4].dwOption = INTERNET_PER_CONN_PROXY_SERVER; List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); List.pszConnection = NULL; List.dwOptionCount = 5; List.dwOptionError = 0; List.pOptions = Option; if(!InternetQueryOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, &nSize)) _tprintf(_T("InternetQueryOption failed! (%d)\n"), GetLastError()); if(Option[0].Value.pszValue != NULL) _tprintf(_T("%s\n"), Option[0].Value.pszValue); if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_PROXY_URL) == PROXY_TYPE_AUTO_PROXY_URL) _tprintf(_T("PROXY_TYPE_AUTO_PROXY_URL\n")); if((Option[2].Value.dwValue & PROXY_TYPE_AUTO_DETECT) == PROXY_TYPE_AUTO_DETECT) _tprintf(_T("PROXY_TYPE_AUTO_DETECT\n")); if((Option[2].Value.dwValue & PROXY_TYPE_PROXY) == PROXY_TYPE_PROXY) { _tprintf(_T("Proxy ENABLED!\n")); ret=TRUE; } else _tprintf(_T("Proxy DISABLED!\n")); _tprintf(_T("Current proxy:%s\n"),Option[4].Value.pszValue); INTERNET_VERSION_INFO Version; nSize = sizeof(INTERNET_VERSION_INFO); InternetQueryOption(NULL, INTERNET_OPTION_VERSION, &Version, &nSize); if(Option[0].Value.pszValue != NULL) GlobalFree(Option[0].Value.pszValue); if(Option[3].Value.pszValue != NULL) GlobalFree(Option[3].Value.pszValue); if(Option[4].Value.pszValue != NULL) GlobalFree(Option[4].Value.pszValue); return ret;}void SetProxy(BOOL enableproxy){ TCHAR buff[256] = _T("127.0.0.1:8087"); // To include server for FTP, HTTPS, and so on, use the string // (ftp=http://
:80; https=https://
:80) INTERNET_PER_CONN_OPTION_LIST List; INTERNET_PER_CONN_OPTION Option[3]; unsigned long nSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); Option[0].dwOption = INTERNET_PER_CONN_PROXY_SERVER; Option[0].Value.pszValue = buff; Option[1].dwOption = INTERNET_PER_CONN_FLAGS; Option[1].Value.dwValue = PROXY_TYPE_DIRECT ; if(enableproxy) Option[1].Value.dwValue |= PROXY_TYPE_PROXY; // 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 = _T("
"); List.dwSize = sizeof(INTERNET_PER_CONN_OPTION_LIST); List.pszConnection = NULL; List.dwOptionCount = 3; List.dwOptionError = 0; List.pOptions = Option; if(!InternetSetOption(NULL, INTERNET_OPTION_PER_CONNECTION_OPTION, &List, nSize)) _tprintf(_T("InternetSetOption failed! (%d)\n"), GetLastError()); InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL,NULL); //The connection settings for other instances of Internet Explorer. _tprintf(_T("Proxy was %s!\n"),enableproxy?_T("ENABLED"):_T("DISABLED"));}int _tmain(int argc, _TCHAR* argv[]){ SetProxy(!QueryProxy()); std::cin.get(); return 0;}

 

 

 

转载地址:http://eufux.baihongyu.com/

你可能感兴趣的文章
安装Nagios来监控远程Windows主机和Linux主机
查看>>
个人简历9不要
查看>>
linux安装nodejs
查看>>
LAMP、LNMP、Tomcat自动安装脚本
查看>>
定增保底方式与纠纷案例
查看>>
linux文件管理
查看>>
ntp+freeipa+ssh
查看>>
分享IT十八掌大数据
查看>>
Python中文出现乱码怎么解决?
查看>>
#8 if与for语法运用与讲解例子
查看>>
mysql插入汉字 乱码
查看>>
python命令行神器Click
查看>>
线上filebeat部署文档和使用方法
查看>>
数据库(一)
查看>>
python Class:面向对象高级编程 __str__ / __repr__
查看>>
简练软考知识点整理-项目配置审核
查看>>
hadoop发行版本之间的区别
查看>>
柏科数据与Veeam建立战略合作关系
查看>>
引领PCB行业变革捷配开启免费打样新时代
查看>>
SpringBoot基础篇之重名Bean的解决与多实例选择
查看>>