請問如何取得本機多的 IP 和 MAC 位址值 ? |
答題得分者是:meta
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
請問如何取得本機多的 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 發送簡訊給我 |
小弟改寫成可以列出所有 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 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
取得所有 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 發送簡訊給我 |
|
pcboy
版主 發表:177 回覆:1838 積分:1463 註冊:2004-01-13 發送簡訊給我 |
引言: 找了一下資料..有一個範例不知是否可供您參考. 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 發送簡訊給我 |
抽出所需要的部份了, 不過程式頗長, 有更簡便方法嗎 ? 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 發送簡訊給我 |
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 發送簡訊給我 |
有較精簡的程式..請參考..
//試過..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
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |