我正在编写一个程序,根据我连接的网络自动切换代理地址。
到目前为止,我已经完成了所有工作,除了我在下面重点介绍的部分。
有没有办法更改自动配置脚本并自动检测代码中的设置?
解决方案可以是P / Invoke注册表编辑。我只需要一些有用的东西。
答案 0 :(得分:17)
您可以使用注册表更改代理设置。请参阅以下链接:
http://support.microsoft.com/kb/819961
关键路径: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>"
关于如何禁用自动检测即代理配置中的设置的question in SuperUser.com。禁用IE代理配置中的“自动检测设置”
摘录自Internet Explorer Automatic Configuration Script Definition via Registry。
脚本1:这会启用AutoConf脚本并定义它是什么(用脚本交换http://xxxx)
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "AutoConfigURL"="http://xxx.xxx.xxx.xxx.xxxx" "ProxyEnable"=dword:00000000
脚本2:此脚本禁用AutoConf脚本并启用具有例外的代理服务器。
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings] "ProxyEnable"=dword:00000001 "ProxyOverride"="proxyexceptionname:portnumber;anotherexceptionname:port "ProxyServer"="ftp=MyFTPProxy:Port;http=MYHTTPPROXY:PORT;https=MYHTTPSPROXY:PORT "AutoConfigURL"=""
答案 1 :(得分:7)
我为此搜索了所有内容。但是我找不到,我编写了下面的代码片段,可以用于此目的。
/// <summary>
/// Checks or unchecks the IE Options Connection setting of "Automatically detect Proxy"
/// </summary>
/// <param name="set">Provide 'true' if you want to check the 'Automatically detect Proxy' check box. To uncheck, pass 'false'</param>
public void IEAutoDetectProxy(bool set)
{
// Setting Proxy information for IE Settings.
RegistryKey RegKey = Registry.CurrentUser.OpenSubKey(@"Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings\\Connections", true);
byte[] defConnection = (byte[])RegKey.GetValue("DefaultConnectionSettings");
byte[] savedLegacySetting = (byte[])RegKey.GetValue("SavedLegacySettings");
if (set)
{
defConnection[8] = Convert.ToByte(9);
savedLegacySetting[8] = Convert.ToByte(9);
}
else
{
defConnection[8] = Convert.ToByte(1);
savedLegacySetting[8] = Convert.ToByte(1);
}
RegKey.SetValue("DefaultConnectionSettings", defConnection);
RegKey.SetValue("SavedLegacySettings", savedLegacySetting);
}
答案 2 :(得分:1)
优于http://support.microsoft.com/kb/819961,通过.REG文件,我们应该引用http://support.microsoft.com/kb/226473&#34; How to programmatically query and set proxy settings under Internet Explorer&#34;,使用InternetSetOption()。
正如http://blogs.msdn.com/b/ieinternals/archive/2013/10/11/web-proxy-configuration-and-ie11-changes.aspx所说:&#34;而不是试图直接“戳”注册表,更新代理设置的正确方法是使用InternetSetOption API。&#34;
答案 3 :(得分:1)
我正在回答,因为我不允许对答案发表评论。我想指出操纵注册表与使用InternetSetOptionAPI之间的区别。如果您直接戳注册表以更改代理设置,那么依赖于WinInet代理配置的Chrome等浏览器不会立即获取新设置,但如果您使用InternetSetOptionAPI进行更改,则会立即使用新设置。这是我的经历。我没有详细说明在操作注册表后可以采取哪些措施来获取设置。
编辑: 为了刷新WinInet代理设置,您可以按如下方式执行Internet SetOption API的简单PInvoke
import csv
import sys, getopt
def csv_dict_reader(file_obj):
listOfLineId = []
reader = csv.DictReader(file_obj, delimiter=',')
i = 0;
for line in reader:
listOfLineId.insert(i, line['line_id']);
i = i + 1;
set1 = set(listOfLineId)
new_dict = dict()
i = 0;
for se in set1:
f1 = open("latency.csv")
readerInput = csv.DictReader(f1, delimiter=',')
for inpt in readerInput:
if (se == inpt['line_id']):
if se in new_dict:
if new_dict[se] < inpt['time_gap']:
new_dict[se] = inpt['time_gap']
else:
new_dict[se] = inpt['time_gap']
print new_dict
write_dict(new_dict)
def write_dict(new_dict):
name_list = ['line_id', 'time_gap']
f = open('finaloutput.csv', 'wb')
writer = csv.DictWriter(f, delimiter=',', fieldnames=name_list)
writer.writeheader()
for key, value in new_dict.iteritems():
writer.writerow({'line_id': key, 'time_gap': value})
f.close()
print "check finaloutput.csv file..."
if __name__ == "__main__":
argv = sys.argv[1:]
inputfile = ''
outputfile = ''
try:
opts, args = getopt.getopt(argv, "hi:o:", ["ifile=", "ofile="])
except getopt.GetoptError:
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit(2)
for opt, arg in opts:
if opt == '-h':
print 'test.py -i <inputfile> -o <outputfile>'
sys.exit()
elif opt in ("-i", "--ifile"):
inputfile = arg
elif opt in ("-o", "--ofile"):
outputfile = arg
with open(inputfile) as f_obj:
csv_dict_reader(f_obj)
答案 4 :(得分:-1)
您只需修改值:
Registry Key : HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\
DWORD AutoDetect = 0 or 1
请参阅this link。