我一直在尝试创建一个简单的程序来更改代理设置,启用/禁用代理。但它只会在第一次更改设置。
我搜索了论坛和互联网,但没有运气。
我已经设法使程序运行一次,但是当第二次调用 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
感谢所有帮助,似乎是一件简单的事情,但让我发疯。问候若阿金