Как приложение Delphi может обнаружить сетевые настройки прокси Windows PC?

У меня есть приложение Delphi, которое общается с веб-серверами в Интернете с помощью компонентов Инди. У большинства пользователей приложения есть прямые Интернет-соединения, но некоторые находятся позади прокси-сервера локальной сети. Я не хочу должным быть спрашивать пользователей к поиску их прокси-сервер в интернет-Опциях / Соединения / диалоговое окно настроек локальной сети

сопроводительный текст http://toybase.files.wordpress.com/2008/11/ie-proxy-settings.png

поскольку вполне откровенно большинство людей не будет знать или заботиться, какова эта установка.

Я могу получить эту информацию через некоторые системные вызовы от Delphi-7 appplication?

Большое спасибо!

10
задан RRUZ 6 January 2010 в 15:22
поделиться

4 ответа

Через WinAPI -- WinHttpGetIEProxyConfigForCurrentUser. Вы должны любить длинные WINAPI имена MS ^_^.

После редактирования OP: Вы можете прочитать из реестра, AFAIR он будет расположен здесь :

 [ HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings ]
13
ответ дан 3 December 2019 в 19:33
поделиться
[

] Вы должны получить от браузера настройки прокси, которые могут находиться в нескольких разных местах в зависимости от используемого браузера. [

] [

]Вы можете рассмотреть возможность поиска протокола []Web Proxy Autodiscovery Protocol[], который автоматически определяет настройки прокси в сети.[

].
1
ответ дан 3 December 2019 в 19:33
поделиться

Delphi Code для 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;
3
ответ дан 3 December 2019 в 19:33
поделиться

Вот еще один метод, который я использую, не требующий прямого доступа к реестру. Он работает в D2007, но я не понимаю, почему он не будет работать в 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;
3
ответ дан 3 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: