我有一个Delphi应用程序,它使用Indy components与互联网上的web服务器通信。该应用程序的大多数用户都有直接的Internet连接,但也有一些用户位于本地网络的代理服务器之后。我不想让用户在Internet Options / Connections / LAN Settings dialog中查找他们的代理服务器
alt text http://toybase.files.wordpress.com/2008/11/ie-proxy-settings.png
坦率地说,大多数人不会知道或关心这个设置是什么。
我可以从Delphi-7应用程序中通过一些系统调用来获取此信息吗?
非常感谢!
发布于 2010-01-06 23:09:11
通过WinAPI -- WinHttpGetIEProxyConfigForCurrentUser。你一定会喜欢微软的长WINAPI名字^_^。
操作编辑后:您可以从注册表中读取,因为它可能位于以下位置:
[ HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings ]发布于 2010-01-13 05:16:04
Kornel Kisielewicz的answer的Delphi代码
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;发布于 2010-01-13 05:56:38
这是我使用的另一种方法,它不需要直接访问注册表。这在D2007下可以工作,但我不明白为什么它在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;https://stackoverflow.com/questions/2013802
复制相似问题