CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Delphi >  VCL组件开发及应用

各位高手,如何获得系统的DNS啊,注册表或函数都行!还有就是为什么在VB里做的OCX控件在VB和VC里都可用,在DELPHI里就不显示出图标呢?

楼主Alvin_huai(Alvin_huai)2003-07-03 12:47:36 在 Delphi / VCL组件开发及应用 提问

各位高手,如何获得系统的DNS啊,注册表或函数都行!还有就是为什么在VB里做的OCX控件在VB和VC里都可用,在DELPHI里就不显示出图标呢? 问题点数:100、回复次数:6Top

1 楼asdf008(棒棒糖)回复于 2003-07-03 12:54:00 得分 20

{获取本机的DNS}    
  unit   GetDnsList;    
   
  interface    
   
  uses    
  Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,    
  StdCtrls;    
   
  type    
  TIPMainForm   =   class(TForm)    
  Info:   TMemo;    
  Button1:   TButton;    
  procedure   Button1Click(Sender:   TObject);    
  procedure   FormCreate(Sender:   TObject);    
  private    
  {   Private   declarations   }    
  public    
  {   Public   declarations   }    
  Procedure   GetNetworkParameters;    
  Procedure   GetAdapterInformation;    
  end;    
   
  var    
  IPMainForm:   TIPMainForm;    
  aDnsList:TStrings;    
  implementation    
   
  {$R   *.DFM}    
   
  Const    
  MAX_HOSTNAME_LEN   =   128;   {   from   IPTYPES.H   }    
  MAX_DOMAIN_NAME_LEN   =   128;    
  MAX_SCOPE_ID_LEN   =   256;    
  MAX_ADAPTER_NAME_LENGTH   =   256;    
  MAX_ADAPTER_DESCRIPTION_LENGTH   =   128;    
  MAX_ADAPTER_ADDRESS_LENGTH   =   8;    
   
  Type    
  TIPAddressString   =   Array[0..4*4-1]   of   Char;    
   
  PIPAddrString   =   ^TIPAddrString;    
  TIPAddrString   =   Record    
  Next   :   PIPAddrString;    
  IPAddress   :   TIPAddressString;    
  IPMask   :   TIPAddressString;    
  Context   :   Integer;    
  End;    
   
  PFixedInfo   =   ^TFixedInfo;    
  TFixedInfo   =   Record   {   FIXED_INFO   }    
  HostName   :   Array[0..MAX_HOSTNAME_LEN+3]   of   Char;    
  DomainName   :   Array[0..MAX_DOMAIN_NAME_LEN+3]   of   Char;    
  CurrentDNSServer   :   PIPAddrString;    
  DNSServerList   :   TIPAddrString;    
  NodeType   :   Integer;    
  ScopeId   :   Array[0..MAX_SCOPE_ID_LEN+3]   of   Char;    
  EnableRouting   :   Integer;    
  EnableProxy   :   Integer;    
  EnableDNS   :   Integer;    
  End;    
   
  PIPAdapterInfo   =   ^TIPAdapterInfo;    
  TIPAdapterInfo   =   Record   {   IP_ADAPTER_INFO   }    
  Next   :   PIPAdapterInfo;    
  ComboIndex   :   Integer;    
  AdapterName   :   Array[0..MAX_ADAPTER_NAME_LENGTH+3]   of   Char;    
  Description   :   Array[0..MAX_ADAPTER_DESCRIPTION_LENGTH+3]   of   Char;    
  AddressLength   :   Integer;    
  Address   :   Array[1..MAX_ADAPTER_ADDRESS_LENGTH]   of   Byte;    
  Index   :   Integer;    
  _Type   :   Integer;    
  DHCPEnabled   :   Integer;    
  CurrentIPAddress   :   PIPAddrString;    
  IPAddressList   :   TIPAddrString;    
  GatewayList   :   TIPAddrString;    
  DHCPServer   :   TIPAddrString;    
  HaveWINS   :   Bool;    
  PrimaryWINSServer   :   TIPAddrString;    
  SecondaryWINSServer   :   TIPAddrString;    
  LeaseObtained   :   Integer;    
  LeaseExpires   :   Integer;    
  End;    
   
  Function   GetNetworkParams(FI   :   PFixedInfo;   Var   BufLen   :   Integer)   :   Integer;    
  StdCall;   External   'iphlpapi.dll'   Name   'GetNetworkParams';    
   
  Function   GetAdaptersInfo(AI   :   PIPAdapterInfo;   Var   BufLen   :   Integer)   :   Integer;    
  StdCall;   External   'iphlpapi.dll'   Name   'GetAdaptersInfo';    
   
  procedure   TIPMainForm.GetAdapterInformation;    
  Var    
  AI,Work   :   PIPAdapterInfo;    
  Size   :   Integer;    
  Res   :   Integer;    
  I   :   Integer;    
   
  Function   MACToStr(ByteArr   :   PByte;   Len   :   Integer)   :   String;    
  Begin    
  Result   :=   '';    
  While   (Len   >   0)   do   Begin    
  Result   :=   Result+IntToHex(ByteArr^,2)+'-';    
  ByteArr   :=   Pointer(Integer(ByteArr)+SizeOf(Byte));    
  Dec(Len);    
  End;    
  SetLength(Result,Length(Result)-1);   {   remove   last   dash   }    
  End;    
   
  Function   GetAddrString(Addr   :   PIPAddrString)   :   String;    
  Begin    
  Result   :=   '';    
  While   (Addr   <>   nil)   do   Begin    
  Result   :=   Result+'A:   '+Addr^.IPAddress+'   M:   '+Addr^.IPMask+#13;    
  Addr   :=   Addr^.Next;    
  End;    
  End;    
   
  Function   TimeTToDateTimeStr(TimeT   :   Integer)   :   String;    
  Const   UnixDateDelta   =   25569;   {   days   between   12/31/1899   and   1/1/1970   }    
  Var    
  DT   :   TDateTime;    
  TZ   :   TTimeZoneInformation;    
  Res   :   DWord;    
   
  Begin    
  If   (TimeT   =   0)   Then   Result   :=   ''    
  Else   Begin    
  {   Unix   TIME_T   is   secs   since   1/1/1970   }    
  DT   :=   UnixDateDelta+(TimeT   /   (24*60*60));   {   in   UTC   }    
  {   calculate   bias   }    
  Res   :=   GetTimeZoneInformation(TZ);    
  If   (Res   =   TIME_ZONE_ID_INVALID)   Then   RaiseLastWin32Error;    
  If   (Res   =   TIME_ZONE_ID_STANDARD)   Then   Begin    
  DT   :=   DT-((TZ.Bias+TZ.StandardBias)   /   (24*60));    
  Result   :=   DateTimeToStr(DT)+'   '+WideCharToString(TZ.StandardName);    
  End    
  Else   Begin   {   daylight   saving   time   }    
  DT   :=   DT-((TZ.Bias+TZ.DaylightBias)   /   (24*60));    
  Result   :=   DateTimeToStr(DT)+'   '+WideCharToString(TZ.DaylightName);    
  End;    
  End;    
  End;    
   
  begin    
  Size   :=   5120;    
  GetMem(AI,Size);    
  Res   :=   GetAdaptersInfo(AI,Size);    
  If   (Res   <>   ERROR_SUCCESS)   Then   Begin    
  SetLastError(Res);    
  RaiseLastWin32Error;    
  End;    
  With   Info,Lines   do   Begin    
  Work   :=   AI;    
  I   :=   1;    
  Repeat    
  Add('');    
  Add('Adapter   '+IntToStr(I));    
  Add('   ComboIndex:   '+IntToStr(Work^.ComboIndex));    
  Add('   Adapter   name:   '+Work^.AdapterName);    
  Add('   Description:   '+Work^.Description);    
  Add('   Adapter   address:   '+MACToStr(@Work^.Address,Work^.AddressLength));    
  Add('   Index:   '+IntToStr(Work^.Index));    
  Add('   Type:   '+IntToStr(Work^._Type));    
  Add('   DHCP:   '+IntToStr(Work^.DHCPEnabled));    
  Add('   Current   IP:   '+GetAddrString(Work^.CurrentIPAddress));    
  Add('   IP   addresses:   '+GetAddrString(@Work^.IPAddressList));    
  Add('   Gateways:   '+GetAddrString(@Work^.GatewayList));    
  Add('   DHCP   servers:   '+GetAddrString(@Work^.DHCPServer));    
  Add('   Has   WINS:   '+IntToStr(Integer(Work^.HaveWINS)));    
  Add('   Primary   WINS:   '+GetAddrString(@Work^.PrimaryWINSServer));    
  Add('   Secondary   WINS:   '+GetAddrString(@Work^.SecondaryWINSServer));    
  Add('   Lease   obtained:   '+TimeTToDateTimeStr(Work^.LeaseObtained));    
  Add('   Lease   expires:   '+TimeTToDateTimeStr(Work^.LeaseExpires));    
  Inc(I);    
  Work   :=   Work^.Next;    
  Until   (Work   =   nil);    
  End;    
  FreeMem(AI);    
  end;    
   
  procedure   TIPMainForm.GetNetworkParameters;    
  Var    
  FI   :   PFixedInfo;    
  Size   :   Integer;    
  Res   :   Integer;    
  I   :   Integer;    
  DNS   :   PIPAddrString;    
   
  begin    
  Size   :=   1024;    
  GetMem(FI,Size);    
  Res   :=   GetNetworkParams(FI,Size);    
  If   (Res   <>   ERROR_SUCCESS)   Then   Begin    
  SetLastError(Res);    
  RaiseLastWin32Error;    
  End;    
  With   Info   do   Begin    
  Clear;    
  Lines.Add('Host   name:   '+FI^.HostName);    
  Lines.Add('Domain   name:   '+FI^.DomainName);    
  aDnsList.Clear;    
  If   (FI^.CurrentDNSServer   <>   nil)   Then    
  begin    
  Lines.Add('Current   DNS   Server:   '+FI^.CurrentDNSServer^.IPAddress);    
  end    
  Else   Lines.Add('Current   DNS   Server:   (none)');    
  I   :=   1;    
  DNS   :=   @FI^.DNSServerList;    
  Repeat    
  Lines.Add('DNS   '+IntToStr(I)+':   '+DNS^.IPAddress);    
  aDnsList.Add(DNS^.IPAddress);    
  Inc(I);    
  DNS   :=   DNS^.Next;    
  Until   (DNS   =   nil);    
  Lines.Add('Scope   ID:   '+FI^.ScopeId);    
  Lines.Add('Routing:   '+IntToStr(FI^.EnableRouting));    
  Lines.Add('Proxy:   '+IntToStr(FI^.EnableProxy));    
  Lines.Add('DNS:   '+IntToStr(FI^.EnableDNS));    
  End;    
  FreeMem(FI);    
  end;    
   
  procedure   TIPMainForm.Button1Click(Sender:   TObject);    
  begin    
  GetNetworkParameters;    
  GetAdapterInformation;    
   
  end;    
   
  procedure   TIPMainForm.FormCreate(Sender:   TObject);    
  begin    
  aDnsList:=TStringList.Create;    
  end;    
   
  end.    
   
  Top

2 楼DWGZ()回复于 2003-07-03 12:54:33 得分 30

第一问题看一下面的代码  
  第二个问题你要安装才能使用   菜单Component   ->   Import   ActiveX   Control   选择你的.ocx,再点Install,OK了  
  unit   GetDnsList;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
      StdCtrls;  
   
  type  
      TIPMainForm   =   class(TForm)  
          Info:   TMemo;  
          Button1:   TButton;  
          procedure   Button1Click(Sender:   TObject);  
          procedure   FormCreate(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
          Procedure   GetNetworkParameters;  
          Procedure   GetAdapterInformation;  
      end;  
   
  var  
      IPMainForm:   TIPMainForm;  
      aDnsList:TStrings;  
  implementation  
   
  {$R   *.DFM}  
   
  Const  
      MAX_HOSTNAME_LEN                               =   128;   {   from   IPTYPES.H   }  
      MAX_DOMAIN_NAME_LEN                         =   128;  
      MAX_SCOPE_ID_LEN                               =   256;  
      MAX_ADAPTER_NAME_LENGTH                 =   256;  
      MAX_ADAPTER_DESCRIPTION_LENGTH   =   128;  
      MAX_ADAPTER_ADDRESS_LENGTH           =   8;  
   
  Type  
      TIPAddressString   =   Array[0..4*4-1]   of   Char;  
   
      PIPAddrString   =   ^TIPAddrString;  
      TIPAddrString   =   Record  
          Next             :   PIPAddrString;  
          IPAddress   :   TIPAddressString;  
          IPMask         :   TIPAddressString;  
          Context       :   Integer;  
      End;  
   
      PFixedInfo   =   ^TFixedInfo;  
      TFixedInfo   =   Record   {   FIXED_INFO   }  
          HostName                   :   Array[0..MAX_HOSTNAME_LEN+3]   of   Char;  
          DomainName               :   Array[0..MAX_DOMAIN_NAME_LEN+3]   of   Char;  
          CurrentDNSServer   :   PIPAddrString;  
          DNSServerList         :   TIPAddrString;  
          NodeType                   :   Integer;  
          ScopeId                     :   Array[0..MAX_SCOPE_ID_LEN+3]   of   Char;  
          EnableRouting         :   Integer;  
          EnableProxy             :   Integer;  
          EnableDNS                 :   Integer;  
      End;  
   
      PIPAdapterInfo   =   ^TIPAdapterInfo;  
      TIPAdapterInfo   =   Record   {   IP_ADAPTER_INFO   }  
          Next                                 :   PIPAdapterInfo;  
          ComboIndex                     :   Integer;  
          AdapterName                   :   Array[0..MAX_ADAPTER_NAME_LENGTH+3]   of   Char;  
          Description                   :   Array[0..MAX_ADAPTER_DESCRIPTION_LENGTH+3]   of   Char;  
          AddressLength               :   Integer;  
          Address                           :   Array[1..MAX_ADAPTER_ADDRESS_LENGTH]   of   Byte;  
          Index                               :   Integer;  
          _Type                               :   Integer;  
          DHCPEnabled                   :   Integer;  
          CurrentIPAddress         :   PIPAddrString;  
          IPAddressList               :   TIPAddrString;  
          GatewayList                   :   TIPAddrString;  
          DHCPServer                     :   TIPAddrString;  
          HaveWINS                         :   Bool;  
          PrimaryWINSServer       :   TIPAddrString;  
          SecondaryWINSServer   :   TIPAddrString;  
          LeaseObtained               :   Integer;  
          LeaseExpires                 :   Integer;  
      End;  
   
  Function   GetNetworkParams(FI   :   PFixedInfo;   Var   BufLen   :   Integer)   :   Integer;  
                    StdCall;   External   'iphlpapi.dll'   Name   'GetNetworkParams';  
   
  Function   GetAdaptersInfo(AI   :   PIPAdapterInfo;   Var   BufLen   :   Integer)   :   Integer;  
                    StdCall;   External   'iphlpapi.dll'   Name   'GetAdaptersInfo';  
   
  procedure   TIPMainForm.GetAdapterInformation;  
  Var  
      AI,Work   :   PIPAdapterInfo;  
      Size         :   Integer;  
      Res           :   Integer;  
      I               :   Integer;  
   
      Function   MACToStr(ByteArr   :   PByte;   Len   :   Integer)   :   String;  
      Begin  
          Result   :=   '';  
          While   (Len   >   0)   do   Begin  
              Result   :=   Result+IntToHex(ByteArr^,2)+'-';  
              ByteArr   :=   Pointer(Integer(ByteArr)+SizeOf(Byte));  
              Dec(Len);  
          End;  
          SetLength(Result,Length(Result)-1);   {   remove   last   dash   }  
      End;  
   
      Function   GetAddrString(Addr   :   PIPAddrString)   :   String;  
      Begin  
          Result   :=   '';  
          While   (Addr   <>   nil)   do   Begin  
              Result   :=   Result+'A:   '+Addr^.IPAddress+'   M:   '+Addr^.IPMask+#13;  
              Addr   :=   Addr^.Next;  
          End;  
      End;  
   
      Function   TimeTToDateTimeStr(TimeT   :   Integer)   :   String;  
      Const   UnixDateDelta   =   25569;   {   days   between   12/31/1899   and   1/1/1970   }  
      Var  
          DT     :   TDateTime;  
          TZ     :   TTimeZoneInformation;  
          Res   :   DWord;  
   
      Begin  
          If   (TimeT   =   0)   Then   Result   :=   ''  
          Else   Begin  
              {   Unix   TIME_T   is   secs   since   1/1/1970   }  
              DT   :=   UnixDateDelta+(TimeT   /   (24*60*60));   {   in   UTC   }  
              {   calculate   bias   }  
              Res   :=   GetTimeZoneInformation(TZ);  
              If   (Res   =   TIME_ZONE_ID_INVALID)   Then   RaiseLastWin32Error;  
              If   (Res   =   TIME_ZONE_ID_STANDARD)   Then   Begin  
                  DT   :=   DT-((TZ.Bias+TZ.StandardBias)   /   (24*60));  
                  Result   :=   DateTimeToStr(DT)+'   '+WideCharToString(TZ.StandardName);  
              End  
              Else   Begin   {   daylight   saving   time   }  
                  DT   :=   DT-((TZ.Bias+TZ.DaylightBias)   /   (24*60));  
                  Result   :=   DateTimeToStr(DT)+'   '+WideCharToString(TZ.DaylightName);  
              End;  
          End;  
      End;  
   
  begin  
      Size   :=   5120;  
      GetMem(AI,Size);  
      Res   :=   GetAdaptersInfo(AI,Size);  
      If   (Res   <>   ERROR_SUCCESS)   Then   Begin  
          SetLastError(Res);  
          RaiseLastWin32Error;  
      End;  
      With   Info,Lines   do   Begin  
          Work   :=   AI;  
          I   :=   1;  
          Repeat  
              Add('');  
              Add('Adapter   '+IntToStr(I));  
              Add('     ComboIndex:   '+IntToStr(Work^.ComboIndex));  
              Add('     Adapter   name:   '+Work^.AdapterName);  
              Add('     Description:   '+Work^.Description);  
              Add('     Adapter   address:   '+MACToStr(@Work^.Address,Work^.AddressLength));  
              Add('     Index:   '+IntToStr(Work^.Index));  
              Add('     Type:   '+IntToStr(Work^._Type));  
              Add('     DHCP:   '+IntToStr(Work^.DHCPEnabled));  
              Add('     Current   IP:   '+GetAddrString(Work^.CurrentIPAddress));  
              Add('     IP   addresses:   '+GetAddrString(@Work^.IPAddressList));  
              Add('     Gateways:   '+GetAddrString(@Work^.GatewayList));  
              Add('     DHCP   servers:   '+GetAddrString(@Work^.DHCPServer));  
              Add('     Has   WINS:   '+IntToStr(Integer(Work^.HaveWINS)));  
              Add('     Primary   WINS:   '+GetAddrString(@Work^.PrimaryWINSServer));  
              Add('     Secondary   WINS:   '+GetAddrString(@Work^.SecondaryWINSServer));  
              Add('     Lease   obtained:   '+TimeTToDateTimeStr(Work^.LeaseObtained));  
              Add('     Lease   expires:   '+TimeTToDateTimeStr(Work^.LeaseExpires));  
              Inc(I);  
              Work   :=   Work^.Next;  
          Until   (Work   =   nil);  
      End;  
      FreeMem(AI);  
  end;  
   
  procedure   TIPMainForm.GetNetworkParameters;  
  Var  
      FI       :   PFixedInfo;  
      Size   :   Integer;  
      Res     :   Integer;  
      I         :   Integer;  
      DNS     :   PIPAddrString;  
   
  begin  
      Size   :=   1024;  
      GetMem(FI,Size);  
      Res   :=   GetNetworkParams(FI,Size);  
      If   (Res   <>   ERROR_SUCCESS)   Then   Begin  
          SetLastError(Res);  
          RaiseLastWin32Error;  
      End;  
      With   Info   do   Begin  
          Clear;  
          Lines.Add('Host   name:   '+FI^.HostName);  
          Lines.Add('Domain   name:   '+FI^.DomainName);  
          aDnsList.Clear;  
          If   (FI^.CurrentDNSServer   <>   nil)   Then  
          begin  
              Lines.Add('Current   DNS   Server:   '+FI^.CurrentDNSServer^.IPAddress);  
          end  
          Else   Lines.Add('Current   DNS   Server:   (none)');  
          I   :=   1;  
          DNS   :=   @FI^.DNSServerList;  
          Repeat  
              Lines.Add('DNS   '+IntToStr(I)+':   '+DNS^.IPAddress);  
              aDnsList.Add(DNS^.IPAddress);  
              Inc(I);  
              DNS   :=   DNS^.Next;  
          Until   (DNS   =   nil);  
          Lines.Add('Scope   ID:   '+FI^.ScopeId);  
          Lines.Add('Routing:   '+IntToStr(FI^.EnableRouting));  
          Lines.Add('Proxy:   '+IntToStr(FI^.EnableProxy));  
          Lines.Add('DNS:   '+IntToStr(FI^.EnableDNS));  
      End;  
      FreeMem(FI);  
  end;  
   
  procedure   TIPMainForm.Button1Click(Sender:   TObject);  
  begin  
      GetNetworkParameters;  
      GetAdapterInformation;  
   
  end;  
   
  procedure   TIPMainForm.FormCreate(Sender:   TObject);  
  begin  
          aDnsList:=TStringList.Create;  
  end;  
   
  end.  
  Top

3 楼lzf1010(深宇)回复于 2003-07-03 13:08:32 得分 50

{获取DNS}  
   
   
  unit   Unit1;  
   
  interface  
   
  uses  
      Windows,   Messages,   SysUtils,   Variants,   Classes,   Graphics,   Controls,   Forms,  
      Dialogs,   StdCtrls,Winsock,comobj,comctrls,ActiveX;  
   
  type  
      TForm1   =   class(TForm)  
          Button1:   TButton;  
          procedure   FormCreate(Sender:   TObject);  
      private  
          {   Private   declarations   }  
      public  
          {   Public   declarations   }  
      end;  
   
  const  
      IPCFG_DUMMY_FILE   =   '_dmytmpdns.tmp';  
      IPCFG_WIN9X   =   'winipcfg.exe   /all   /batch   ';  
      IPCFG_WINNT   =   'ipconfig.exe   /all';  
      IPCFG_DNS_SERVER_LINE   =   'DNS   Servers';  
      REG_NT_NAMESERVER_PATH   =   'System\CurrentControlSet\Services\Tcpip\Parameters';  
      REG_NT_NAMESERVER   =   'DhcpNameServer';  
      REG_9X_NAMESERVER_PATH   =   'System\CurrentControlSet\Services\MSTCP';  
      REG_9X_NAMESERVER   =   'NameServer';  
   
  var  
      Form1:   TForm1;  
   
  implementation  
   
  {$R   *.dfm}  
   
  function   GetBasicOsType   :   LongWord;//VER_PLATFORM_WIN32_WINDOWS(Win98)  
  var                                                                 //VER_PLATFORM_WIN32_NT(2000   ro   XP)  
      VerInfo   :   TOsVersionInfo;  
  begin  
      VerInfo.dwOSVersionInfoSize   :=   SizeOf(VerInfo);  
      GetVersionEx   (VerInfo);  
      Result   :=   VerInfo.dwPlatformId;  
  end;  
   
  procedure   GetConsoleOutput(const   CommandLine   :   string;   var   Output   :   TStringList);  
  var  
      SA:   TSecurityAttributes;  
      SI:   TStartupInfo;  
      PI:   TProcessInformation;  
      StdOutFile,   AppProcess,   AppThread   :   THandle;  
      RootDir,   WorkDir,   StdOutFileName:   string;  
  const  
      FUNC_NAME   =   'GetConsoleOuput';  
  begin  
      StdOutFile:=0;  
      AppProcess:=0;  
      AppThread:=0;  
      try  
          RootDir:=ExtractFilePath(ParamStr(0));  
          WorkDir:=ExtractFilePath(CommandLine);  
          if   not   (FileSearch(ExtractFileName(CommandLine),WorkDir)<>'')   then  
              WorkDir:=RootDir;  
          FillChar(SA,SizeOf(SA),#0);  
          SA.nLength:=SizeOf(SA);  
          SA.lpSecurityDescriptor:=nil;  
          SA.bInheritHandle:=True;  
          StdOutFileName:=RootDir+'output.tmp';  
          StdOutFile:=CreateFile(PChar(StdOutFileName),  
                                        GENERIC_READ   or   GENERIC_WRITE,  
                                        FILE_SHARE_READ   or   FILE_SHARE_WRITE,  
                                        @SA,  
                                        CREATE_ALWAYS,  
                                        FILE_ATTRIBUTE_TEMPORARY   or  
                                        FILE_FLAG_WRITE_THROUGH,  
                                        0);  
          if   StdOutFile   =   INVALID_HANDLE_VALUE   then  
              raise   Exception.CreateFmt('Function   %s()   failed!'   +   #10#13   +  
                  'Command   line   =   %s',[FUNC_NAME,CommandLine]);  
          FillChar(SI,SizeOf(SI),#0);  
          with   SI   do  
              begin  
                  cb:=SizeOf(SI);  
                  dwFlags:=STARTF_USESHOWWINDOW   or   STARTF_USESTDHANDLES;  
                  wShowWindow:=SW_HIDE;  
                  hStdInput:=GetStdHandle(STD_INPUT_HANDLE);  
                  hStdError:=StdOutFile;  
                  hStdOutput:=StdOutFile;  
              end;  
          if   CreateProcess(nil,   PChar(CommandLine),   nil,   nil,  
                                            True,   0,   nil,  
                                            PChar(WorkDir),   SI,   PI)   then  
                begin  
                    WaitForSingleObject(PI.hProcess,INFINITE);  
                    AppProcess:=PI.hProcess;  
                    AppThread:=PI.hThread;  
                end  
          else  
              raise   Exception.CreateFmt('CreateProcess()   in   function   %s()   failed!'  
                                        +   #10#13   +   'Command   line   =   %s',[FUNC_NAME,CommandLine]);  
   
          CloseHandle(StdOutFile);  
          StdOutFile:=0;  
   
          Output.Clear;  
          Output.LoadFromFile(StdOutFileName);  
   
      finally  
          if   StdOutFile   <>   0   then   CloseHandle(StdOutFile);  
          if   AppProcess   <>   0   then   CloseHandle(AppProcess);  
          if   AppThread   <>   0   then   CloseHandle(AppThread);  
          if   FileExists(StdOutFileName)   then  
              SysUtils.DeleteFile(StdOutFileName);  
      end;  
  end;  
   
  function   GetDnsIp   :   string;  
  var  
      Output   :   TStringList;  
      DnsIp,  
      CmdLine   :   string;  
   
      function   BackSlashStr   (const   s   :   string)   :   string;  
      begin  
          Result   :=   s;  
          if   Result[Length(Result)]   <>   '\'   then  
              Result   :=   Result   +   '\';  
      end;  
   
      function   GetWindowsPath   :   string;  
      var  
          Temp   :   array   [0..MAX_PATH]   of   char;  
      begin  
          GetWindowsDirectory   (Temp,   SizeOf(Temp));  
          Result   :=   BackSlashStr   (Temp);  
      end;  
   
      function   GetSystemPath   :   string;  
      var  
          Temp   :   array   [0..MAX_PATH]   of   char;  
      begin  
          GetSystemDirectory   (Temp,   SizeOf(Temp));  
          Result:=   BackSlashStr(Temp);  
      end;  
   
      function   LooksLikeIP(StrIn:   string):   boolean;  
      var  
          IPAddr   :   string;  
          period,   octet,   i   :   Integer;  
      begin  
          result   :=   false;  
          IPAddr   :=   StrIn;  
          for   i   :=   1   to   4   do  
              begin  
                  if   i   =   4   then  
                      period   :=   255  
                  else   period   :=   pos('.',IPAddr);  
                  if   period   =   0   then  
                      exit;  
                  try  
                      octet   :=   StrToInt(copy(IPAddr,1,period   -   1));  
                  except  
                      exit;  
                  end;  
                  if   (octet   <   (1   div   i))   or   (octet   >   254)   then  
                        exit;  
                  if   i   =   4   then  
                        result   :=   true  
                  else  
                        IPAddr   :=   copy(IPAddr,period+1,255);  
              end;  
      end;  
      function   GetIpCfg9xOutPath   :   string;  
      begin  
          Result   :=   GetWindowsPath   +   IPCFG_DUMMY_FILE;  
      end;  
   
      function   GetIpCfgExePath   :   string;  
      begin  
          Result   :=   '';  
          Case   GetBasicOsType   of  
              VER_PLATFORM_WIN32_WINDOWS   :   Result   :=   GetWindowsPath   +   IPCFG_WIN9X   +   GetIpCfg9xOutPath;  
              VER_PLATFORM_WIN32_NT             :   Result   :=   GetSystemPath   +   IPCFG_WINNT;  
          end;  
      end;  
   
      function   GetDnsIpFromReg   :   string;  
      var  
          OpenKey   :   HKEY;  
          Vn,  
          SubKey   :   PChar;  
          DataType,  
          DataSize   :   integer;  
          Temp   :   array   [0..2048]   of   char;  
      begin  
          Result   :=   '';  
          SubKey   :=   '';  
          Vn   :=   '';  
          case   GetBasicOsType   of  
              VER_PLATFORM_WIN32_WINDOWS   :   begin  
                                                                            SubKey   :=   REG_9X_NAMESERVER_PATH;  
                                                                            Vn   :=   REG_9X_NAMESERVER;  
                                                                        end;  
              VER_PLATFORM_WIN32_NT             :   begin  
                                                                            SubKey   :=   REG_NT_NAMESERVER_PATH;  
                                                                            Vn   :=   REG_NT_NAMESERVER;  
                                                                        end;  
          end;  
          if   RegOpenKeyEx   (HKEY_LOCAL_MACHINE,   SubKey,   REG_OPTION_NON_VOLATILE,  
                    KEY_READ,   OpenKey)   =   ERROR_SUCCESS   then  
              begin  
                  DataType   :=   REG_SZ;  
                  DataSize   :=   SizeOf(Temp);  
                  if   RegQueryValueEx   (OpenKey,   Vn,   nil,   @DataType,   @Temp,  
                      @DataSize)   =   ERROR_SUCCESS   then  
                      Result   :=   string(Temp);  
                  RegCloseKey   (OpenKey);  
              end;  
      end;  
   
      function   GetDnsIpFromIpCfgOut   (const   Output   :   TStringList;  
          var   DnsIp   :   string)   :   boolean;  
      var  
          i   :   integer;  
      begin  
          Result   :=   FALSE;  
          if   Output.Count   >=   1   then  
              for   i   :=   0   to   Output.Count   -   1   do  
              begin  
                  if   Pos(IPCFG_DNS_SERVER_LINE,   Output[i])   >   0   then  
                  begin  
                      DnsIp   :=   Trim(Copy   (Output[i],   Pos(':',   Output[i])+1,   Length(Output[i])));  
                      Result   :=   LooksLikeIp   (DnsIp);  
                  end;  
              end;  
      end;  
  begin  
      CmdLine   :=   GetIpCfgExePath;  
      if   CmdLine   <>   ''   then  
      begin  
          Output   :=   TStringList.Create;  
          try  
              case   GetBasicOsType   of  
                  VER_PLATFORM_WIN32_WINDOWS   :   begin  
                                                                                GetConsoleOutput   (CmdLine,   Output);  
                                                                                Output.LoadFromFile   (GetIpCfg9xOutPath);  
                                                                            end;  
                                                                            else  
                                                                                GetConsoleOutput   (CmdLine,   Output);  
              end;  
   
              if   GetDnsIpFromIpCfgOut   (Output,   DnsIp)   then  
                    Result   :=   DnsIp  
              else  
                    Result   :=   GetDnsIpFromReg;  
          finally  
              Output.Free;  
          end;  
      end;  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      caption:=GetDnsIp;  
  end;  
   
  end.  
   
  Top

4 楼windwather(流年似水)回复于 2003-07-03 13:17:20 得分 0

..........Top

5 楼jun_01(无名小卒)回复于 2003-07-03 14:30:59 得分 0

天哪Top

相关问题

  • VB函数
  • vb函数
  • VB的两个小函数?
  • Delphi和VB API函数
  • VB乘方函数?在线
  • 怎样把自己写的函数(源码形式)作成 OCX 控件,使其可以在 VB、VFP 中使用?
  • Delphi中的类似vb中的函数mid是什么函数?
  • delphi有右函数,左函数,像VB的Left,Mid,Right
  • Delphi中哪个函数和VB中的Right函数等价!
  • vb中什么函数可以代替pb的Yield() 函数??

关键词

  • win32
  • tz
  • tipaddressstring
  • inttostr
  • timet
  • bias
  • dt
  • adapter
  • work
  • dns

得分解答快速导航

  • 帖主:Alvin_huai
  • asdf008
  • DWGZ
  • lzf1010

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo