puede pudo detectar configuracion automaticamente delphi proxy delphi-7

delphi - puede - windows no pudo detectar automaticamente la configuracion de proxy de la red



¿Cómo puede una aplicación Delphi detectar la configuración proxy de red de una PC con Windows? (4)

Tengo una aplicación Delphi que se comunica con los servidores web en Internet utilizando los componentes de Indy . La mayoría de los usuarios de la aplicación tienen conexiones directas a Internet, pero algunos están detrás de un servidor proxy de una red local. No quiero tener que pedirles a los usuarios que busquen su servidor proxy en el cuadro de diálogo Opciones / Conexiones / Configuración de LAN.

texto alternativo http://toybase.files.wordpress.com/2008/11/ie-proxy-settings.png

como francamente, la mayoría de la gente no sabrá ni le importará qué es este entorno.

¿Puedo obtener esta información a través de algunas llamadas al sistema desde una aplicación Delphi-7?

¡Muchas gracias!


A través de WinAPI - WinHttpGetIEProxyConfigForCurrentUser . Tienes que amar los nombres largos de WINAPI de MS ^ _ ^.

Después de la edición de OP: Puede leer desde el registro, AFAIR se ubicaría aquí:

[ HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings ]


Debería obtener la configuración del proxy desde el navegador, que podría estar en varias ubicaciones diferentes dependiendo del navegador en uso.

Considere buscar en el protocolo de detección automática de proxy web , que detecta automáticamente la configuración de proxy en una red.


Aquí hay otro método que utilizo, que no requiere acceso directo al registro. Esto funciona bajo D2007, pero no puedo ver por qué no funcionaría en D7.

uses WinInet, SysUtils; function UseIEProxyInfo(var ProxyHost: String; var ProxyPort: Integer): Boolean; var ProxyInfo: PInternetProxyInfo; Len: LongWord; ProxyDetails: String; s2: String; i1: Integer; procedure RemoveProtocol(var str: string); var i1 : integer; begin i1 := PosText(''://'', str); if i1 > 0 then Delete(str, 1, i1 + 2); i1 := PosText(''http='', str); if i1 > 0 then begin Delete(str, 1, i1 + 4); str := SubStr(str, 1, '' ''); end; end; begin Result := False; Len := 4096; GetMem(ProxyInfo, Len); try if InternetQueryOption(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then begin if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then begin Result := True; ProxyDetails := ProxyInfo^.lpszProxy; RemoveProtocol(ProxyDetails); s2 := SubStr(ProxyDetails, 2, '':''); if s2 <> '''' then begin try i1 := StrToInt(s2); except i1 := -1; end; if i1 <> -1 then begin ProxyHost := SubStr(ProxyDetails, 1, '':''); ProxyPort := i1; end; end; end; end; finally FreeMem(ProxyInfo); end; end;


El código Delphi para la respuesta de Kornel Kisielewicz :

uses Registry, Windows; function detectIEProxyServer() : string; begin with TRegistry.Create do try RootKey := HKEY_CURRENT_USER; if OpenKey(''/Software/Microsoft/Windows/CurrentVersion/Internet Settings'', False) then begin Result := ReadString(''ProxyServer''); CloseKey; end else Result := ''''; finally Free; end; end;