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 P>
Texte alt http: //toybase.files.wordpress. COM / 2008/11 / IE-proxy-réglages.png p>
Comme assez franchement, la plupart des gens ne sauront ni se soucient de ce que ce réglage est. P>
Puis-je obtenir ces informations via certains appels système à partir d'une application Application Delphi-7? P>
Merci beaucoup! P>
4 Réponses :
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 ]
+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/...
Vous devrez obtenir le paramètre proxy du navigateur, qui pourrait être dans plusieurs endroits différents en fonction du navigateur utilisé. p>
Vous pouvez envisager de regarder dans Protocole AutoDiscovery de Web , qui détecte automatiquement les paramètres de proxy sur un réseau. p>
Les utilisateurs utiliseront très certainement, c'est-à-dire :) mais merci pour le lien!
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;
NB: Tregistry.Readstring (): "Si l'entrée de registre contient autre chose qu'une chaîne, une exception est soulevée."
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;
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