VBScriptでプロキシの設定を切り替える


概要

VBScriptでプロキシの設定を切り替えます。

インターネットオプションのレジストリ(システムのプロキシ設定)を書き換えて実現します。

この方法は、たとえば、即座にブラウザに反映させたい場合には不向きです。(ブラウザの再起動が必要になる)
そのようなケースは各ブラウザの拡張機能を利用するのがよいと思います。

要点

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable
でプロキシサーバを利用するにチェックを入れて

HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer
にプロキシサーバのアドレスとポートを設定すればOKです。

' レジストリ
Const REGKEY_PROXY_ENABLE = "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable"

Const REGKEY_PROXY_SERVER = "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer"

'プロキシサーバを利用するにチェック
objShell.RegWrite REGKEY_PROXY_ENABLE, 1, "REG_DWORD"

'プロキシサーバのアドレスとポートを設定
objShell.RegWrite REGKEY_PROXY_SERVER, "localhost:3128", "REG_SZ"

プロキシを解除するときは、
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable
でプロキシサーバを利用するのチェックを外すだけでOKです。

ソース

プロキシ設定用の簡単な画面をつけています。

proxy.hta
<!DOCTYPE html>
<html>
<head>
    <title>Proxy</title>
</head>
<script language="vbscript">
' 画面サイズ変更
Sub Window_OnLoad
  Window.ResizeTo 240,120
End Sub
</script>

<body>
    <input type="radio" name="proxy" value="proxy1" onclick="SetProxy()">プロキシ設定<br>
    <input type="radio" name="proxy" value="proxyNone" onclick="RemoveProxy()">プロキシなし<br>
</body>

<script language="vbscript">

' レジストリ
Const REGKEY_PROXY_ENABLE = "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyEnable"

Const REGKEY_PROXY_SERVER = "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\ProxyServer"

' オブジェクト
Dim objShell:Set objShell = CreateObject("WScript.Shell")

' プロキシ設定
Sub SetProxy()
  'プロキシサーバを利用するにチェック
  objShell.RegWrite REGKEY_PROXY_ENABLE, 1, "REG_DWORD"

  'プロキシサーバのアドレスとポートを設定
  objShell.RegWrite REGKEY_PROXY_SERVER, "localhost:3128", "REG_SZ"

  If objShell.RegRead(REGKEY_PROXY_ENABLE) = 1 Then
    server = objShell.RegRead(REGKEY_PROXY_SERVER)
    MsgBox("プロキシ設定成功:" & server)
  Else
    server = objShell.RegRead(REGKEY_PROXY_SERVER)
    MsgBox("プロキシ設定失敗:" & server)
  End If
End Sub


' プロキシ解除
Sub RemoveProxy()
  ' プロキシサーバを利用するのチェックを外す
  objShell.RegWrite REGKEY_PROXY_ENABLE, 0, "REG_DWORD"

  ' プロキシサーバのアドレスとポートに値が入っていても
  ' プロキシは解除されているので、以下はコメントアウトしておく
  ' objShell.RegWrite REGKEY_PROXY_SERVER, "", "REG_SZ"

  If objShell.RegRead(REGKEY_PROXY_ENABLE) = 0 Then
    MsgBox("プロキシ解除成功")
  Else
    MsgBox("プロキシ解除失敗")
  End If
End Sub

</script>
</html>