全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:5123
推到 Plurk!
推到 Facebook!

請問如何取得本機多的 IP 和 MAC 位址值 ?

答題得分者是:meta
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-02-01 15:14:50 IP:210.69.xxx.xxx 未訂閱
請問如何取得本機多的 IP 和 MAC 位址值 ?    小弟先找過了, 論壇上無此範例    小弟有在別地方找到取得單一 MAC 位址範例
uses
NB30;    function GetAdapterInfo(Lana: Char): String;
var
  Adapter: TAdapterStatus;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBRESET);
  NCB.ncb_lana_num := Lana;
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;      FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBASTAT);
  NCB.ncb_lana_num := Lana;
  NCB.ncb_callname := '*';      FillChar(Adapter, SizeOf(Adapter), 0);
  NCB.ncb_buffer := @Adapter;
  NCB.ncb_length := SizeOf(Adapter);
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;
  Result :=
  IntToHex(Byte(Adapter.adapter_address[0]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[1]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[2]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[3]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[4]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;    function GetMACAddress: string;
var
  AdapterList: TLanaEnum;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBENUM);
  NCB.ncb_buffer := @AdapterList;
  NCB.ncb_length := SizeOf(AdapterList);
  Netbios(@NCB);
  if Byte(AdapterList.length) > 0 then
    Result := GetAdapterInfo(AdapterList.lana[0])
  else
    Result := 'mac not found';
end;    procedure TForm1.FormCreate(Sender: TObject);    begin
  ShowMessage(GetMACAddress);
end;    
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-02-01 15:23:00 IP:210.69.xxx.xxx 未訂閱
小弟改寫成可以列出所有 MAC 位址    
uses
 NB30;    function GetAdapterInfo(Lana: Char): String;
var
  Adapter: TAdapterStatus;
  NCB: TNCB;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBRESET);
  NCB.ncb_lana_num := Lana;
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;      FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBASTAT);
  NCB.ncb_lana_num := Lana;
  NCB.ncb_callname := '*';      FillChar(Adapter, SizeOf(Adapter), 0);
  NCB.ncb_buffer := @Adapter;
  NCB.ncb_length := SizeOf(Adapter);
  if Netbios(@NCB) <> Char(NRC_GOODRET) then
  begin
    Result := 'mac not found';
    Exit;
  end;
  Result :=
  IntToHex(Byte(Adapter.adapter_address[0]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[1]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[2]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[3]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[4]), 2)   '-'  
  IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;    function GetMACAddressAll: string;
var
  AdapterList: TLanaEnum;
  NCB: TNCB;
  MAC: String;
  lana_num: integer;
begin
  FillChar(NCB, SizeOf(NCB), 0);
  NCB.ncb_command := Char(NCBENUM);
  NCB.ncb_buffer := @AdapterList;
  NCB.ncb_length := SizeOf(AdapterList);
  Netbios(@NCB);
  MAC := '';
  lana_num :=0;
  Result :='';
  if Byte(AdapterList.length) > 0 then
    while (MAC<>'mac not found') do
    begin
      if Result='' then
        Result := Result   MAC
      else
        Result := Result   ', '  MAC;
      MAC := GetAdapterInfo(AdapterList.lana[lana_num]);
      lana_num := lana_num  1;
    end
  else
    Result := 'mac not found';
end;    procedure TForm1.FormCreate(Sender: TObject);    begin
  ShowMessage(GetMACAddressAll);
end;    
發表人 - pcboy2 於 2005/02/01 15:38:50
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
meta
中階會員


發表:3
回覆:60
積分:57
註冊:2004-06-09

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-02-01 15:44:49 IP:202.39.xxx.xxx 未訂閱
請問是多「個」ip嗎? 請參考 http://delphi.ktop.com.tw/topic.php?topic_id=56997
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-02-01 15:48:12 IP:210.69.xxx.xxx 未訂閱
取得所有 IP 位址的程式如下 :    
unit Unit1;    interface    uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;    type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    var
  Form1: TForm1;    implementation    {$R *.dfm}
uses
Unit2;    procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Lines.Text := GetAllIP;
  Memo1.Lines.Add('');
  Memo1.Lines.Add(Memo1.Lines[0]);
end;    end.
// 使用 Delphi 7 Eneterprise 的 Indy
// GetIP 取得所有本機電腦的 IP 位址    unit Unit2;    interface      function GetAllIP:String;    implementation    uses IdStack;    function GetAllIP:String;
var
  IdStack: TIdStack;
begin
  IdStack := TIdStack.CreateStack;
  try
    Result := IdStack.LocalAddresses.Text;
  finally
    IdStack.Free;
  end;
end;    end.
現在問題是, 小弟想要一對一的抓出, 該如何改寫程式 ? 例如 IP1 (MAC1) IP2 (MAC2) IP3 (MAC3)
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
meta
中階會員


發表:3
回覆:60
積分:57
註冊:2004-06-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-02-01 16:34:27 IP:202.39.xxx.xxx 未訂閱
找了一下資料..有一個範例不知是否可供您參考. http://delphi.about.com/od/fullcodeprojects/l/aa112903a.htm
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-02-02 09:51:42 IP:210.69.xxx.xxx 未訂閱
引言: 找了一下資料..有一個範例不知是否可供您參考. http://delphi.about.com/od/fullcodeprojects/l/aa112903a.htm < face="Verdana, Arial, Helvetica"> 範例提供的程式可以正常執行, 但是 source 在 Delphi 7 Enterprise 執行有問題: TrafficUnit.pas 171 行 self.FAverageInPerSec := InTotal div ActiveCountIn 出現錯誤 Project NetworkTrafficMonitor.exe raised exception class EDivByZero with message 'Division by zero'. Process stopped. Use Step or Run to continue. TrafficUnit.pas 183 行 self.FAverageInPerSec := OutTotal div ActiveCountIn 出現錯誤 Project NetworkTrafficMonitor.exe raised exception class EDivByZero with message 'Division by zero'. Process stopped. Use Step or Run to continue. 做了點改寫, 可以執行了; 程式有些大, 研究中, 有精簡的版本更好
if ActiveCountIn<>0 then
  self.FAverageInPerSec := InTotal div ActiveCountIn
else
  self.FAverageInPerSec := InTotal;
if ActiveCountIn<>0 then
  self.FAverageInPerSec := OutTotal div ActiveCountIn
else
  self.FAverageInPerSec := OutTotal
發表人 - pcboy2 於 2005/02/02 10:05:58
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-02 11:51:28 IP:210.69.xxx.xxx 未訂閱
抽出所需要的部份了, 不過程式頗長, 有更簡便方法嗎 ? Thanks !    
unit Unit1;    interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
const
  ANY_SIZE      = 1;
  MAX_ADAPTER_ADDRESS_LENGTH = 8; // arb.      MAX_INTERFACE_NAME_LEN = 256; { mrapi.h }
  MAXLEN_PHYSADDR = 8; { iprtrmib.h }
  MAXLEN_IFDESCR = 256; { --"---     }    type
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;    //----------- MibIf STRUCTURES------------------------------------------------------      PTMibIfRow = ^TMibIfRow;
  TMibIfRow = packed record
    wszName: array[1..MAX_INTERFACE_NAME_LEN] of WCHAR;
    dwIndex: DWORD;
    dwType: DWORD;
    dwMTU: DWORD;
    dwSpeed: DWORD;
    dwPhysAddrLen: DWORD;
    bPhysAddr: array[1..MAXLEN_PHYSADDR] of byte;
    dwAdminStatus: DWORD;
    dwOperStatus: DWORD;
    dwLastChange: DWORD;
    dwInOctets: DWORD;
    dwInUcastPkts: DWORD;
    dwInNUCastPkts: DWORD;
    dwInDiscards: DWORD;
    dwInErrors: DWORD;
    dwInUnknownProtos: DWORD;
    dwOutOctets: DWORD;
    dwOutUCastPkts: DWORD;
    dwOutNUCastPkts: DWORD;
    dwOutDiscards: DWORD;
    dwOutErrors: DWORD;
    dwOutQLen: DWORD;
    dwDescrLen: DWORD;
    bDescr: array[1..MAXLEN_IFDESCR] of char; //byte;
  end;      TMIBIfArray = array of TMIBIFRow;      PTMibIfTable = ^TMIBIfTable;      TMibIfTable = packed record
    dwNumEntries: DWORD;
    Table: array[0..ANY_SIZE - 1] of TMibIfRow;
  end;    //----------- MibIPAddr STRUCTURES------------------------------------------------------      TMacAddress = array[1..MAX_ADAPTER_ADDRESS_LENGTH] of byte;      PTMibIPAddrRow = ^TMibIPAddrRow;
  TMibIPAddrRow = packed record
    dwAddr: DWORD;
    dwIndex: DWORD;
    dwMask: DWORD;
    dwBCastAddr: DWORD;
    dwReasmSize: DWORD;
    Unused1,
      Unused2: WORD;
  end;      TMibIPAddrArray = array of TMIBIPAddrRow;      PTMibIPAddrTable = ^TMibIPAddrTable;
  TMibIPAddrTable = packed record
    dwNumEntries: DWORD;
    Table: array[0..ANY_SIZE - 1] of TMibIPAddrRow;
  end;    var
  Form1: TForm1;    implementation      function GetIfTable( pIfTable: PTMibIfTable; pdwSize: PULONG; bOrder: boolean ): DWORD;  stdCall; external 'IPHLPAPI.DLL';
  function GetIpAddrTable( pIpAddrTable: PTMibIPAddrTable;  pdwSize: PULONG;  bOrder: BOOL ): DWORD; stdcall; external 'IPHLPAPI.DLL';    {$R *.dfm}    procedure Get_IfTableMIB( var MIBIfArray: TMIBIfArray );
var
  i,
    Error,
    TableSize   : integer;
  pBuf          : PChar;
  NumEntries    : DWORD;
  sDescr,
    Temp        : string;
begin
  TableSize := 0;
   // first call: get memsize needed
  Error := GetIfTable( PTMibIfTable( pBuf ), @TableSize, false );
  if Error <> ERROR_INSUFFICIENT_BUFFER then
    EXIT;
  GetMem( pBuf, TableSize );       // get table pointer
  Error := GetIfTable( PTMibIfTable( pBuf ), @TableSize, false );
  if Error = NO_ERROR then
  begin
    NumEntries := PTMibIfTable( pBuf )^.dwNumEntries;
    if NumEntries > 0 then
    begin
      SetLength( MIBIfArray, NumEntries );
      inc( pBuf, SizeOf( NumEntries ) );
      for i := 0 to pred(NumEntries) do
      begin
        MIBIfArray[i] := PTMibIfRow( pBuf )^;
        inc( pBuf, SizeOf( TMIBIfRow ) );
      end;
    end
  end;
  dec( pBuf, SizeOf( DWORD )   NumEntries * SizeOf( TMIBIfRow ) );
  FreeMem( pBuf );
end;    procedure Get_IPAddrTableMIB( var IPAddrTable:TMibIPAddrArray  );
var
  IPAddrRow     : TMibIPAddrRow;
  TableSize     : DWORD;
  ErrorCode     : DWORD;
  i             : integer;
  pBuf          : PChar;
  NumEntries    : DWORD;
begin
  TableSize := 0; ;
  pBuf := '';
  NumEntries :=0;
  // first call: get table length
  ErrorCode := GetIpAddrTable( PTMibIPAddrTable( pBuf ), @TableSize, true );
  if Errorcode <> ERROR_INSUFFICIENT_BUFFER then
    EXIT;      GetMem( pBuf, TableSize );
  // get table
  ErrorCode := GetIpAddrTable( PTMibIPAddrTable( pBuf ), @TableSize, true );
  if ErrorCode = NO_ERROR then
  begin
    NumEntries := PTMibIPAddrTable( pBuf )^.dwNumEntries;
    if NumEntries > 0 then
    begin
      SetLength( IPAddrTable, NumEntries);
      inc( pBuf, SizeOf( DWORD ) );
      for i := 1 to NumEntries do
      begin
        IPAddrTable[ i-1 ] := PTMIBIPAddrRow( pBuf )^;
        inc( pBuf, SizeOf( TMIBIPAddrRow ) );
      end;
    end;
  end;      // we must restore pointer!
  dec( pBuf, SizeOf( DWORD )   NumEntries * SizeOf( IPAddrRow ) );
  FreeMem( pBuf );
end;    function IpAddr2Str( IPAddr: DWORD ): string;
var
  i             : integer;
begin
  Result := '';
  for i := 1 to 4 do
  begin
    Result := Result   Format( '=.', [IPAddr and $FF] );
    IPAddr := IPAddr shr 8;
  end;
  Delete( Result, Length( Result ), 1 );
end; {*IpAddr2Str*}    function GetIPFromIFIndex(InterfaceIndex: Cardinal): string;
var
 i:  integer;
 IPArr : TMIBIPAddrArray;
begin
   Result := '!not_found!';  // shouldn't happen...
   Get_IPAddrTableMIB( IpArr );  // get IP-address table
   if Length(IPArr) > 0 then
     for i := low(IPArr) to High(IPArr) do  // look for matching index...
       if IPArr[i].dwIndex = InterfaceIndex then
       begin
         Result := IPAddr2Str(IParr[i].dwAddr);
         BREAK;
       end;
end; (*GetIPFromIFIndex*)    function MacAddr2Str( MacAddr: TMacAddress; size: integer ): string;
{ converts numerical MAC-address to ww-xx-yy-zz string }
var
  i             : integer;
begin
  if Size = 0 then
  begin
    Result := '00-00-00-00-00-00';
    EXIT;
  end
  else Result := '';
  //
  for i := 1 to Size do
    Result := Result   IntToHex( MacAddr[i], 2 )   '-';
  Delete( Result, Length( Result ), 1 );
end; {*MacAddr2Str*}    procedure TForm1.FormCreate(Sender: TObject);
var
  MibArr : TMIBIfArray;
  IP : String;
  Mac : String;
  i : Integer;
begin
  Memo1.Clear;
  Get_IfTableMIB(MibArr);  // get current MIB data
  i:=0;      while GetIPFromIFIndex(MibArr[i].dwIndex)<>'!not_found!' do
  begin
    IP := GetIPFromIFIndex(MibArr[i].dwIndex);
    Mac := MacAddr2Str(TMacAddress(MibArr[i].bPhysAddr), MibArr[i].dwPhysAddrLen);
    Memo1.Lines.Add('IP : '  IP);
    Memo1.Lines.Add('Mac : '  Mac);
//    Memo1.Lines.Add('bDescr : '   MibArr[i].bDescr);
    Memo1.Lines.Add('');
    i:=i 1;
  end;
end;    end.    
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
pcboy
版主


發表:177
回覆:1838
積分:1463
註冊:2004-01-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-03 09:08:56 IP:210.69.xxx.xxx 未訂閱
unit MainForm;    interface    uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,Variants,IniFiles;    type
  TIPMainForm = class(TForm)
    Info: TMemo;
    procedure FormCreate(Sender: TObject);      private
    { Private declarations }
    Procedure GetNetworkParameters;
    Procedure GetAdapterInformation;
  public
    { Public declarations }
    //IniFileName : String;
  end;    var
  IPMainForm: TIPMainForm;
  hname:string;
  macname:string;
  macadd:string;
  macindex:string;    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.FormCreate(Sender: TObject);
begin
  GetNetworkParameters;
  GetAdapterInformation;
end;    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;
     macname:=Work^.AdapterName;
     macadd:=MACToStr(@Work^.Address,Work^.AddressLength);
     macindex:=IntToStr(Work^.Index);
     {
     IniFileName := ChangeFileext(Application.ExeName,'.ini');
    with TINIFile.Create(IniFileName) do
    try
       //保存目前TForm物件的座標屬性
       WriteString('userinfo','Host name',hname);
       WriteString('userinfo','Adapter name',macname);
       WriteString('userinfo','Adapter address',macadd);
       WriteString('userinfo','Index',macindex);
    finally
       //釋放TINIFile對象
       Free;
       TINIFile.Create('mac.ini');
       //保存目前TForm物件的座標屬性
       WriteString('userinfo','Host name',hname);
       WriteString('userinfo','Adapter name',macname);
       WriteString('userinfo','Adapter address',macadd);
       WriteString('userinfo','Index',macindex);
       Free;
    end;
    }
    Repeat          Add(#13#10   'Adapter ' IntToStr(I));
      Add('  ComboIndex: ' IntToStr(Work^.ComboIndex));
      Add('  Adapter name: ' Work^.AdapterName);
      //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);
  hname:=FI^.HostName;
  If (Res <> ERROR_SUCCESS) Then Begin
    SetLastError(Res);
    RaiseLastWin32Error;
  End;
  With Info,Lines do Begin
    Clear;
    Add('Hostname : ' FI^.HostName);        Add('Domain name: ' FI^.DomainName);        If (FI^.CurrentDNSServer <> nil) Then
      Add('Current DNS Server: ' FI^.CurrentDNSServer^.IPAddress)
    Else Add('Current DNS Server: (none)');        I := 1;
    DNS := @FI^.DNSServerList;
    Repeat
      Add('DNS ' IntToStr(I) ': ' DNS^.IPAddress);
      Inc(I);
      DNS := DNS^.Next;
    Until (DNS = nil);        Add('Scope ID: ' FI^.ScopeId);
    Add('Routing: ' IntToStr(FI^.EnableRouting));
    Add('Proxy: ' IntToStr(FI^.EnableProxy));
    Add('DNS: ' IntToStr(FI^.EnableDNS));
  End;
  FreeMem(FI);
end;    end.
------
能力不足,求助於人;有能力時,幫幫別人;如果您滿意答覆,請適時結案!

子曰:問有三種,不懂則問,雖懂有疑則問,雖懂而想知更多則問!
meta
中階會員


發表:3
回覆:60
積分:57
註冊:2004-06-09

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-02-04 17:34:30 IP:202.39.xxx.xxx 未訂閱
有較精簡的程式..請參考.. //試過..D7下可執行 http://groups.google.com.tw/groups?hl=zh-TW&lr=&threadm=3beaaa63_2%40dnews&rnum=7&prev=/groups%3Fhl%3Dzh-TW%26q%3Ddelphi%2Bip%252Bmac%2Baddress%26spell%3D1    //完整範例 可免費下載..IPHlpAPI.zip http://www.delphi-jedi.org/APILIBRARY:621195    
系統時間:2024-07-03 2:35:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!