05.08.2009, 20:35
|
Прохожий
|
|
Регистрация: 04.08.2009
Сообщения: 8
Репутация: 10
|
|
Цитата:
Сообщение от lmikle
Ну выводит другой адрес. Тот, который я указал в настройках...
Посмотри по справке функции конвертирования. StrPas переводит PChar в AnsiString. Найди функцию с правильным целевым типом. Или попробуй конвертнуть сначала в AnsiString, а потом уже ее присвоить Edit'у.
|
Вот решил проблему - код рабочий:
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, wininet, StdCtrls;
type
INTERNETPROXYINFO = record
dwAccessType: DWORD;
lpszProxy: PAnsiChar;
lpszProxyBypass: PAnsiChar;
end;
PInetProxyInfo = ^INTERNETPROXYINFO;
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure GetProxyData(var ProxyEnabled: boolean; var ProxyServer: ansistring; var ProxyPort: integer);
var
ProxyInfo: PInetProxyInfo;
Len: LongWord;
i, j: integer;
begin
Len := 4096;
ProxyEnabled := false;
GetMem(ProxyInfo, Len);
try
if InternetQueryOptionA(nil, INTERNET_OPTION_PROXY, ProxyInfo, Len)
then
if ProxyInfo^.dwAccessType = INTERNET_OPEN_TYPE_PROXY then
begin
ProxyEnabled:= True;
ProxyServer := ProxyInfo^.lpszProxy;
//showmessage('!');
end
finally
FreeMem(ProxyInfo);
end;
if ProxyEnabled and (ProxyServer <> '') then
begin
i := Pos('http=', ProxyServer);
if (i > 0) then
begin
Delete(ProxyServer, 1, i+5);
j := Pos(';', ProxyServer);
if (j > 0) then
ProxyServer := Copy(ProxyServer, 1, j-1);
end;
i := Pos(':', ProxyServer);
if (i > 0) then
begin
ProxyPort := StrToIntDef(Copy(ProxyServer, i+1, Length(ProxyServer)-i), 0);
ProxyServer := Copy(ProxyServer, 1, i-1)
end
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
pren: boolean;
s: ansistring;
p: integer;
begin
GetProxyData(pren, s, p);
edit1.Text:=(s+':'+inttostr(p));
end;
end.
|