Windows 7 通过 cmd 禁用代理 - 并生效

Windows 7 通过 cmd 禁用代理 - 并生效

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 上测试过。

相关内容