10
votes

Comment une application Delphi peut-elle détecter les paramètres de proxy de réseau d'un PC Windows?

J'ai une application Delphi qui communique avec des serveurs Web sur Internet à l'aide du composants indy . La plupart des utilisateurs de l'application ont des connexions Internet directes, mais certaines sont derrière un serveur proxy d'un réseau local. Je ne veux pas avoir à demander aux utilisateurs de rechercher leur serveur proxy dans Options Internet / Connexions / Dialogue des paramètres LAN

Texte alt http: //toybase.files.wordpress. COM / 2008/11 / IE-proxy-réglages.png

Comme assez franchement, la plupart des gens ne sauront ni se soucient de ce que ce réglage est.

Puis-je obtenir ces informations via certains appels système à partir d'une application Application Delphi-7?

Merci beaucoup!


0 commentaires

4 Réponses :


14
votes

via Winapi - WinHTTPGETIEPROXYCONFIGFORCAURENTUREUSER . Vous devez aimer les longs noms de Winapi de MS ^ _ ^.

Après Op Modifier: Vous pouvez lire depuis le registre, il serait situé ici: P>

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


3 commentaires

+1 Mais si je ne me trompe pas, c'est à dire seulement, cependant. Firefox et les autres navigateurs conservent leurs propres paramètres de proxy.


C'est vrai, mais j'ai supposé que si l'OP veut la faire passer par des appels système, c'est ce qu'il est après.


Merci! Maintenant, je sais quoi rechercher, j'ai trouvé du code ici: coding.derkeiler.com/archive/delphi/...



1
votes

Vous devrez obtenir le paramètre proxy du navigateur, qui pourrait être dans plusieurs endroits différents en fonction du navigateur utilisé.

Vous pouvez envisager de regarder dans Protocole AutoDiscovery de Web , qui détecte automatiquement les paramètres de proxy sur un réseau.


1 commentaires

Les utilisateurs utiliseront très certainement, c'est-à-dire :) mais merci pour le lien!



4
votes

Le code DELPHI pour Kornel Kisielewicz 's Réponse :

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;


1 commentaires

NB: Tregistry.Readstring (): "Si l'entrée de registre contient autre chose qu'une chaîne, une exception est soulevée."



3
votes

Voici une autre méthode que j'utilise, ce qui ne nécessite pas d'accès direct du registre. Cela fonctionne sous D2007, mais je ne vois pas pourquoi cela ne fonctionnerait pas sous 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;


2 commentaires

Il serait bon de connaître la définition de votre fonction substrative, car il n'est pas tout à fait évident ici.


@ MJ2008: C'est une référence à une fonction de l'unité Madstrings.PAS à partir de la bibliothèque de manipulation d'exception Madexcept. Vous pouvez trouver une aide en ligne ici: help.madshi.net/stringsub.htm