W jaki sposób aplikacja Delphi może wykryć Ustawienia sieciowego serwera proxy na komputerze z systemem Windows?
Mam aplikację Delphi, która komunikuje się z serwerami WWW w Internecie za pomocą Indy components. Większość użytkowników aplikacji ma bezpośrednie połączenia internetowe, ale niektórzy są za serwerem proxy sieci lokalnej. Nie chcę prosić użytkowników o wyszukanie ich serwera proxy w Opcje internetowe / połączenia / Ustawienia LAN dialog
Alt text http://toybase.files.wordpress.com/2008/11/ie-proxy-settings.png
Jako całkiem szczerze mówiąc, większość ludzi nie będzie wiedzieć lub obchodzi, co to ustawienie jest.
Czy Mogę uzyskać te informacje poprzez niektóre wywołania systemowe z aplikacji Delphi-7?
Wielkie dzięki!
4 answers
Przez WinAPI -- WinHttpGetIEProxyConfigForCurrentuser . Trzeba kochać długie nazwy WinAPI MS^_^.
Po op edit: można odczytać z rejestru, AFAIR będzie on zlokalizowany tutaj:
[ HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings ]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 15:34:19
Kod Delphi dla Kornel Kisielewicz 'S odpowiedź :
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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:38
Oto inna metoda, której używam, która nie wymaga bezpośredniego dostępu do rejestru. To działa pod D2007, ale nie widzę, dlaczego nie działa pod 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;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-01 20:00:05
Będziesz musiał uzyskać ustawienie proxy z przeglądarki, która może znajdować się w kilku różnych lokalizacjach w zależności od używanej przeglądarki.
Możesz rozważyć przyjrzenie się Web Proxy Autodiscovery Protocol , który automatycznie wykrywa ustawienia proxy w sieci.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-06 15:15:15