在開發自動化測試工具或網路爬蟲時,常需要以程式碼動態切換 IE 的 Proxy 設定。本文示範如何透過 C# 操作登錄檔,快速啟用、停用或變更 IE 代理伺服器位址與連接埠。
IE 的代理設定儲存在登錄檔 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings 下,主要鍵值如下:
1 啟用代理,0 停用代理IP:Port,例如 127.0.0.1:8888using Microsoft.Win32;
using System;
using System.Windows.Forms;
namespace IEProxySetter
{
public partial class MainForm : Form
{
private const string RegPath = @"Software\Microsoft\Windows\CurrentVersion\Internet Settings";
// 啟用代理
private void btnEnableProxy_Click(object sender, EventArgs e)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(RegPath, true))
{
if (key == null) return;
key.SetValue("ProxyEnable", 1);
key.SetValue("ProxyServer", $"{txtIp.Text.Trim()}:{txtPort.Text.Trim()}");
MessageBox.Show("代理已啟用!");
}
}
// 停用代理
private void btnDisableProxy_Click(object sender, EventArgs e)
{
using (RegistryKey key = Registry.CurrentUser.OpenSubKey(RegPath, true))
{
if (key == null) return;
key.SetValue("ProxyEnable", 0);
MessageBox.Show("代理已停用!");
}
}
}
}
原始碼片段中的路徑 SoftwareMicrosoftWindowsCurrentVersionInternet Settings 缺少反斜線分隔符,正確寫法應為 Software\Microsoft\Windows\CurrentVersion\Internet Settings 或使用 @ 字串常值避免轉義問題。
using 區塊確保資源釋放RegistryKey 實作 IDisposable,建議以 using 區塊包裹,確保 Close() 被正確呼叫,避免鎖定登錄檔導致後續操作失敗。
實務上應加入 IP 格式與連接埠範圍(1-65535)檢查,防止寫入無效資料導致 IE 無法連網。
修改登錄檔後,IE 不會立即讀取新設定。可呼叫 InternetSetOption 通知系統設定已變更:
[DllImport("wininet.dll", SetLastError = true)]
private static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int lpdwBufferLength);
private const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
private const int INTERNET_OPTION_REFRESH = 37;
public static void RefreshIESettings()
{
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
}
在寫入登錄檔後呼叫 RefreshIESettings(),即可讓開啟中的 IE 視窗立即套用新代理。
| 現象 | 可能原因 | 解決方向 |
|---|---|---|
| 設定無效 | 路徑錯誤或權限不足 | 確認路徑正確、以管理員身分執行 |
| IE 不更新 | 未通知 WinINET | 呼叫 InternetSetOption |
| 例外錯誤 | 登錄檔鍵值不存在 | 先用 CreateSubKey 建立 |
透過 Microsoft.Win32.Registry 操作登錄檔是 C# 控制 IE 代理最直接的方式。搭配 InternetSetOption 即可達成即時切換,適用於自動化測試、爬蟲切換 IP 等場景。實際專案中建議封裝為獨立工具類,並加入完整的例外處理與記錄機制。