首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi应用程序如何检测Windows PC的网络代理设置?

Delphi应用程序如何检测Windows PC的网络代理设置?
EN

Stack Overflow用户
提问于 2010-01-06 23:04:54
回答 4查看 8.4K关注 0票数 10

我有一个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应用程序中通过一些系统调用来获取此信息吗?

非常感谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-06 23:09:11

通过WinAPI -- WinHttpGetIEProxyConfigForCurrentUser。你一定会喜欢微软的长WINAPI名字^_^。

操作编辑后:您可以从注册表中读取,因为它可能位于以下位置:

代码语言:javascript
复制
 [ HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet Settings ]
票数 14
EN

Stack Overflow用户

发布于 2010-01-13 05:16:04

Kornel Kisielewiczanswer的Delphi代码

代码语言:javascript
复制
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;
票数 4
EN

Stack Overflow用户

发布于 2010-01-13 05:56:38

这是我使用的另一种方法,它不需要直接访问注册表。这在D2007下可以工作,但我不明白为什么它在D7下不能工作。

代码语言:javascript
复制
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;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2013802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档