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;