Ich möchte aus meinem Programm-Code heraus die IE Proxy-Einstellungen ändern.
Dazu ändere ich die Einstellungen in der Registry und teile Windows mit, dass diese geändert wurden. Dieses Vorgehen wird auf hunderten von Seiten im Internet so beschrieben und funktioniert auf den ersten Blick auch.
Das Problem ist nun: Es funktioniert nur ein einziges Mal im aktuellen Prozess!
Hier ein simples Beispiel:
Delphi-Quellcode:
procedure DisableProxy;
var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
Reg.Rootkey:= HKEY_CURRENT_USER;
Reg.OpenKey('Software\Microsoft\Windows\CurrentVersion\Internet Settings',False);
Reg.WriteBool('ProxyEnable',False);
Reg.CloseKey;
Reg.Free;
InternetSetOption(nil, INTERNET_OPTION_SETTINGS_CHANGED, nil, 0);
//oder InternetSetOption(nil, INTERNET_OPTION_REFRESH, nil, 0);
end;
Zum Nachvollziehen:
1. Die obere Funktion in ein neues Projekt einbinden, sodass es mit einem Button ausgeführt werden kann.
2. Manuell einen beliebigen Proxy einstellen (Systemsteuerung > Internetoptionen > Verbindungen > LAN-Einstellungen > [x]Proxyserver für LAN verwenden und eine Adress+Port eingeben) und bestätigen
3. Im Programm den Button betätigen
4. Die Einstellungen über die Inernetoptionen überprüfen -> Haken ist weg
5. Haken wieder setzen und bestätigen
6. Im Programm den Button wieder betätigen
7. Die Einstellungen überprüfen -> Haken ist immer noch da!
8. Programm schließen, wieder starten, Button betätigen
9. Einstellungen prüfen -> Haken weg!
InternetSetOption funktioniert nur beim ersten Aufruf korrekt. Beim zweiten Aufruf werden die manuellen Registry-Änderungen einfach verworfen. Ich verstehe absolut nicht warum, vermute aber, dass WinInet irgendwie bzw. irgendwas cached. Lässt sich das unterbinden oder umgehen?