Tag Archives: Internet Explorer

Como detectar a configuração do proxy automaticamente

Ao utilizar a API do Windows, podemos recuperar facilmente as informações de configuração do proxy do perfil de qualquer usuário logado em qualquer estação.

Detalhes da API:

WinHttpGetIEProxyConfigForCurrentUser function

BOOL WINAPI WinHttpGetIEProxyConfigForCurrentUser(
  __inout  WINHTTP_CURRENT_USER_IE_PROXY_CONFIG *pProxyConfig
);

Como utilizá-la:

unit ProxyTest;

interface

uses
  Winapi.Windows, Vcl.Dialogs;

type
  PWinHttpCurrentUserIeProxyConfig = ^TWinHttpCurrentUserIeProxyConfig;

  TWinHttpGetIeProxyConfigForCurrentUser = function (pProxyConfig:
    PWinHttpCurrentUserIeProxyConfig): Boolean; stdcall;

  TWinHttpCurrentUserIeProxyConfig = record
    fAutoDetect: Boolean;
    lpszAutoConfigUrl: PWideChar;
    lpszProxy: PWideChar;
    lpszProxyBypass: PWideChar;
  end;

var
  WinHttpGetIeProxyConfigForCurrentUser: TWinHttpGetIeProxyConfigForCurrentUser;

procedure GetProxy;

implementation

procedure GetProxy;
var
  FHandle: THandle;
  FCurrentUser: PWinHttpCurrentUserIeProxyConfig;
begin
  FHandle := LoadLibrary('winhttp.dll');
  try
    if FHandle <> 0 then
    begin
      @WinHttpGetIeProxyConfigForCurrentUser := GetProcAddress(FHandle,
        'WinHttpGetIEProxyConfigForCurrentUser');

      if Assigned(WinHttpGetIeProxyConfigForCurrentUser) then
      begin
        WinHttpGetIeProxyConfigForCurrentUser(FCurrentUser);
        ShowMessage('Proxy: ' + FCurrentUser.lpszProxy);
      end;
    end;
  finally
    FreeLibrary(FHandle);
  end;
end;

end.

Desenvolvi o exemplo em Delphi XE2, qualquer dúvida é só entrar em contato. :wink: