Windows 7(64 位)通过 cmd 禁用代理 - 并生效?
我已经找到要更改的正确注册表项,并且有更改它的代码。
reg add "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t REG_DWORD /d 0
发现于
gpresults /h "%userprofile%\desktop\RSPO.html"
当我打开 IE(以管理员身份)并手动关闭 LAN 代理设置时,运行“reg add”确实会改变 reg 键,与改变的键相同。
但是,当我手动执行此操作时,预期的效果发生了 - 我不再有代理问题。但是通过我的 cmd 脚本,密钥发生了变化,但我仍然有代理问题。当我在 IE 中打开 LAN 代理设置时,它仍然处于启用状态。
如何更改注册表项并使其生效?
尝试更改一堆注册表项...
当前脚本...
reg add "HKLM\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t REG_DWORD /d 0
reg add "HKLM\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t REG_DWORD /d 0
reg add "HKCU\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t REG_DWORD /d 0
reg add "HKCU\Software\Microsoft\Windows\CurrentVersion\Internet Settings" /f /v ProxyEnable /t REG_DWORD /d 0
答案1
不幸的是,没有简单的方法。正如你所注意到的,你错过了魔法“立即读取这些设置”命令:
InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, NULL)
InternetSetOption(NULL, INTERNET_OPTION_REFRESH, NULL, NULL)
当然,你不能直接在 中调用 C 函数cmd
。不过,有一个(相对)可行的使用 PowerShell 执行此操作的方法:
function Reload-InternetOptions
{
$signature = @'
[DllImport("wininet.dll", SetLastError = true, CharSet=CharSet.Auto)]
public static extern bool InternetSetOption(IntPtr hInternet, int
dwOption, IntPtr lpBuffer, int dwBufferLength);
'@
$interopHelper = Add-Type -MemberDefinition $signature -Name MyInteropHelper -PassThru
$INTERNET_OPTION_SETTINGS_CHANGED = 39
$INTERNET_OPTION_REFRESH = 37
$result1 = $interopHelper::InternetSetOption(0, $INTERNET_OPTION_SETTINGS_CHANGED, 0, 0)
$result2 = $interopHelper::InternetSetOption(0, $INTERNET_OPTION_REFRESH, 0, 0)
$result1 -and $result2
}
只需像这样调用它: 。成功后Reload-InternetOptions
它将返回。True
请注意,此方法每次运行时都会动态创建一些内容。它无法通过 PowerShell 卸载,并且会不断累积,直到您退出运行该方法的 PowerShell 进程。
答案2
IE 设置是针对每个用户的,因此我认为您只是针对了错误的注册表项。
例如,为了在域范围内关闭代理复选框,我们使用登录脚本在这里禁用它:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable
答案3
使用 vbs 脚本启用/禁用代理时我遇到了同样的问题。
我刚刚添加了这个:
Shell.运行“ms-settings:网络代理”
WScript.睡眠 1000
Shell.Run“taskkill /f /im SystemSettings.exe”,,True
它会打开代理设置,等待 1 秒,然后关闭它。这将确保您的代理更改有效。
答案4
我创建了一个简单的 CLI 工具,用于强制重新加载 IE 代理设置。它调用 WININET.DLL InternetSetOption 函数。
从这里下载: https://gofile.io/?c=ol4zE7
在 W7 和 W10 上测试过。