Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi GetProxyInformation unter Delphi 2009 (https://www.delphipraxis.net/131010-getproxyinformation-unter-delphi-2009-a.html)

GPRSNerd 17. Mär 2009 13:54


GetProxyInformation unter Delphi 2009
 
Hi,

bisher habe ich unter Delphi 2007 den Code aus der Codelib zum Auslesen der Proxy-Informationen benutzt.
Unter Delphi 2009 kompiliert das auch ohne Hinweise, Warnungen etc., gibt aber in GetProxyInformation immer nur Leerstrings oder Müll zurück.
Ein Wechsel auf InternetQueryOptionW brachte keine Verbesserung.

Hat irgendjemand damit schon Erfolge bei der Migration nach Delphi 2009 erzielt?

Gruß,
Stefan

RWarnecke 17. Mär 2009 15:44

Re: GetProxyInformation unter Delphi 2009
 
Hast Du auch die anderen Typen im Sourcecode angepasst ? String zu WideString u.s.w.

DeddyH 17. Mär 2009 15:49

Re: GetProxyInformation unter Delphi 2009
 
Und auf InternetQueryOptionW umgestellt?

GPRSNerd 17. Mär 2009 15:52

Re: GetProxyInformation unter Delphi 2009
 
Sorry, my bad.
In ersten Post meinte ich natürlich InternetQueryOptionW und nicht GetProxyInformationW.

In der Kern-Funktion GetProxyInformation ist nicht viel zum Umstellen auf Widestring etc.:
Delphi-Quellcode:
function GetProxyInformation: WideString;
var
  ProxyInfo: PInternetProxyInfo;
  Len: LongWord;
begin
  Result := '';
  Len := 4096;
  GetMem(ProxyInfo, Len);
  try
    if InternetQueryOptionW(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then
      if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then
      begin
        Result := ProxyInfo^.lpszProxy;
      end;
  finally
    FreeMem(ProxyInfo);
  end;
  //ShowMessage(result);
end;
Der Output mit dem Showmessage am Ende ergibt zig nicht darstellbare Zeichen.

GPRSNerd 17. Mär 2009 16:01

Re: GetProxyInformation unter Delphi 2009
 
Durch ein Outputdebugstring habe ich mir mal das Result in Ascii und Hex ausgeben lassen:

00000000 16:59:34.932 [4040] ????????????????‰???????????????????????????>
00000001 16:59:34.932 [4040] 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F893F3F3F3F3F3F3F3F 3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3F3E

Da kommt also wirklich nur Müll zurück, das Ergebnis der InternetQueryOptionW ist aber true.

DeddyH 17. Mär 2009 16:11

Re: GetProxyInformation unter Delphi 2009
 
Unter Delphi 2007 gibt die Widestring-Variante allerdings einen gültigen String aus.
Zitat:

---------------------------
Projecttest
---------------------------
http=10.20.30.40:1024 ftp=20.30.40.50:8080
---------------------------
OK
---------------------------
So habe ich es zum Testen auch im IE eingetragen.

GPRSNerd 17. Mär 2009 16:16

Re: GetProxyInformation unter Delphi 2009
 
Hmmmmm, seltsam.
Ich habe eine ähnliche Proxy-Konfig auf meinem Firmen-Rechner.
Kannst du mir zur Kontrolle mal deine D2007-Exe schicken oder attachen?

Bernhard Geyer 17. Mär 2009 16:17

Re: GetProxyInformation unter Delphi 2009
 
Schaut euch mal die Übersetzung in WinInet.pas an:

Delphi-Quellcode:
  INTERNET_PROXY_INFO = record
    dwAccessType: DWORD;      { dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or }
    lpszProxy: LPCTSTR;       { lpszProxy - proxy server list }
    lpszProxyBypass: LPCTSTR; { lpszProxyBypass - proxy bypass list }
  end;
und in Windows.pas

Delphi-Quellcode:
LPCTSTR = PAnsiChar;
Vermutlich ist das der Fehler das die übersetzung des Records nicht korrekt ist und noch auf Ansi steht.

GPRSNerd 17. Mär 2009 16:28

Re: GetProxyInformation unter Delphi 2009
 
Das unter D2007 kompilierte Testprogramm gibt bei mir korrekt den http/Proxy aus: 172.20.10.3:8080, danke Detlef!
Dann kann ich mich also auf D2009 als Quelle des Problems konzentrieren.

Ich definiere mir gerade mal ein paar neue Types für die Widechar-Variante aus der Wininet.pas. Mal sehen, ob das was bringt...

GPRSNerd 17. Mär 2009 16:37

Re: GetProxyInformation unter Delphi 2009
 
So, indem ich den Record auf PAnsiChars umstelle funktionierts:

Delphi-Quellcode:
type
  PInternetProxyInfoA = ^INTERNET_PROXY_INFOA;
  INTERNET_PROXY_INFOA = record
    dwAccessType: DWORD;        { dwAccessType - INTERNET_OPEN_TYPE_DIRECT, INTERNET_OPEN_TYPE_PROXY, or }
    lpszProxy: PAnsiChar;       { lpszProxy - proxy server list }
    lpszProxyBypass: PAnsiChar; { lpszProxyBypass - proxy bypass list }
  end;

function GetProxyInformation: AnsiString;
var
  ProxyInfo: PInternetProxyInfoA;
  Len: DWORD;
begin
  Result := '';
  Len := 4096;
  GetMem(ProxyInfo, Len);
  try
    if InternetQueryOptionW(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len) then
    begin
      if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then
      begin
        Result := ProxyInfo^.lpszProxy;
      end;
    end;
  finally
    FreeMem(ProxyInfo);
  end;
end;
Danke an Bernhard und Detlef!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:37 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz