如何以编程方式更改LAN设置(代理配置)

时间:2011-04-06 16:47:07

标签: c# .net windows vb.net networking

我正在编写一个程序,根据我连接的网络自动切换代理地址。

到目前为止,我已经完成了所有工作,除了我在下面重点介绍的部分。

LAN Settings Dialog

有没有办法更改自动配置脚本并自动检测代码中的设置?

解决方案可以是P / Invoke注册表编辑。我只需要一些有用的东西。

5 个答案:

答案 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)

来源:Programmatically Set Browser Proxy Settings in C#

答案 4 :(得分:-1)

您只需修改值:

Registry Key : HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings\
DWORD AutoDetect = 0 or 1

请参阅this link