어떤 네트워크 연결이 활성 상태인지에 따라 프록시 서버를 자동으로 변경하는 응용 프로그램을 작성하려고합니다. 이 응용 프로그램에서 사용자는 notifyIcon 컨텍스트 메뉴에서 수동으로 서버를 클릭하고 서버를 전환하는 함수를 호출 할 수도 있습니다.처음으로 레지스트리 만 변경할 수있는 이유는 무엇입니까?
내 문제는 다음과 같습니다. 응용 프로그램이 처음으로 함수를 호출 할 때 프록시 서버를 변경하지만 이후에는 작동하지 않습니다. 디버그 문을 넣어 올바른 프록시 서버가 해당 함수에 전달되고 있는지 (실제로 올바른지) 확인했지만 레지스트리 항목이 처음부터 변경되지 않습니다. 내가 도대체 뭘 잘못하고있는 겁니까? 여기
내 프록시 클래스 :class Proxy
{
[DllImport("wininet.dll")]
public static extern bool InternetSetOption(IntPtr hInternet, int dwOption, IntPtr lpBuffer, int dwBufferLength);
public const int INTERNET_OPTION_SETTINGS_CHANGED = 39;
public const int INTERNET_OPTION_REFRESH = 37;
static bool settingsReturn, refreshReturn;
public void SetProxy(ProxyList proxy)
{
RegistryKey registry = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings", true);
registry.SetValue("ProxyEnable", 1);
registry.SetValue("ProxyServer", proxy.server + ":" + proxy.port);
registry.Close();
// These lines implement the Interface in the beginning of program
// They cause the OS to refresh the settings, causing IP to realy update
settingsReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_SETTINGS_CHANGED, IntPtr.Zero, 0);
refreshReturn = InternetSetOption(IntPtr.Zero, INTERNET_OPTION_REFRESH, IntPtr.Zero, 0);
}
}
그리고 여기가 컨텍스트 메뉴에서 함수를 호출하는 방법입니다
void Form1_Click(object sender, EventArgs e)
{
Proxy proxyServer = new Proxy();
ToolStripMenuItem item = (ToolStripMenuItem)sender;
proxyServer.SetProxy(XML.proxy[(int)item.Tag]);
proxyServer = null;
notifyIcon1.BalloonTipText = XML.proxy[(int)item.Tag].name + " is now your Active Proxy";
notifyIcon1.ShowBalloonTip(1);
}
기존 프록시 서버에 대한 연결이 열려있는 응용 프로그램이 자동으로 새 프록시에 연결되거나 새 프록시가 프록시 변경을받지 않을 것으로 예상됩니까? –