1

我一直在尝试创建一个简单的程序来更改代理设置,启用/禁用代理。但它只会在第一次更改设置。

我搜索了论坛和互联网,但没有运气。

我已经设法使程序运行一次,但是当第二次调用 ToggleProxy() 函数时,它首先相应地更改注册表,然后当调用 wininet.dll 以刷新 Internet Explorer 中的设置时,旧值为放回注册表。

因此,在更改代理和更新 IE 设置时,一切正常,但在尝试更改第二时间时,它会恢复第一次调用的设置。

我需要关闭或清除某些东西吗?如果关闭应用程序并重新启动它,它会再次运行一次。

wininet.dll/InternetSetOption 是否以某种方式存储了第一个调用?

在下面附加 Dll 声明和 ToggleProxy() 函数:

'Refresh Internet Options for Webbrowsers
Public Declare Auto Function InternetSetOption Lib "wininet.dll" (hInternet As IntPtr, dwOption As Integer, lpBuffer As IntPtr, dwBufferLength As Integer) As Boolean
Public Const INTERNET_OPTION_SETTINGS_CHANGED = 39
Public Const INTERNET_OPTION_REFRESH = 37


'Toggle the Proxy On/Off
Public Sub ToggleProxy()
    'Declare temp variable as Integer
    Dim setValue As Integer
    ' If EnableProxy regkey is 1, set setvalue to 0, else set to 1.
    If ProxyRegKey = "1" Then
        setValue = "0"
    Else
        setValue = "1"
    End If


    ' Change value in EnableProxy regkey to the value set in setValue    
    Dim autoshell = My.Computer.Registry.CurrentUser.OpenSubKey("Software\Microsoft\Windows\CurrentVersion\Internet Settings", True)

    'Set Value fo EnableProxy according to setValue
    autoshell.SetValue("ProxyEnable", setValue)
    autoshell.Close()
    MessageBox.Show("Value is:" & setValue)

    'Re-read the proxy regkey.
    ReadProxyRegKey()

    'Refresh Internet Settings
    InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0)
    InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0)
End Sub

感谢所有帮助,似乎是一件简单的事情,但让我发疯。问候若阿金

4

0 回答 0