//取网卡地址(MAC)列表 procedure NBGetMac(Strings: TStrings); //取第一个非零的网卡地址 function NBGetFirstMac: String; //判断指定网卡地址是否存在 function NBIsMacInList(Mac: String): Boolean;procedure NBGetMac(Strings: TStrings); function HexBL(by: Byte): String; begin Result := Format('%x', [by]); if Length(Result) < 2 then Result := '0' + Result; end; var NCB: TNCB; Adapter: TAdapterStatus; LanaEnum: TLanaEnum; I, J: Integer; Str: String; begin Strings.Clear; ZeroMemory(@NCB,SizeOf(NCB)); NCB.ncb_command := Chr(NCBENUM); NetBios(@NCB); NCB.ncb_buffer := @LanaEnum; NCB.ncb_length := SizeOf(LanaEnum); NCB.ncb_command := Chr(NCBENUM); NetBios(@NCB); for I := 0 to Ord(LanaEnum.length) - 1 do begin ZeroMemory(@NCB,SizeOf(NCB)); NCB.ncb_command := Chr(NCBRESET); NCB.ncb_lana_num := LanaEnum.lana[I]; NetBios(@NCB); ZeroMemory(@NCB,SizeOf(NCB)); NCB.ncb_command := Chr(NCBASTAT); NCB.ncb_lana_num := LanaEnum.lana[I]; StrPCopy(NCB.ncb_callname,'*'); NCB.ncb_buffer := @Adapter; NCB.ncb_length := SizeOf(Adapter); NetBios(@NCB); Str := ''; for J := 0 to 5 do begin if J > 0 then Str := Str + '-'; Str := Str + HexBL(Byte(Adapter.adapter_address[J])); end; Strings.Add(Str); end; end;function NBGetFirstMac: String; var Strings: TStringList; I, J: Integer; begin Result := ''; Strings := TStringList.Create; try NBGetMac(Strings); for I := 0 to Strings.Count - 1 do begin for J := 1 to Length(Strings.Strings[I]) do if (Strings.Strings[I][J] <> '0') and (Strings.Strings[I][J] <> '-') then begin Result := Strings.Strings[I]; Break; end; if Result <> '' then Break; end; finally Strings.Free; end; end;function NBIsMacInList(Mac: String): Boolean; var Strings: TStringList; I: Integer; begin Result := False; Strings := TStringList.Create; try NBGetMac(Strings); for I := 0 to Strings.Count - 1 do begin if Strings.Strings[I] = Mac then begin Result := True; Break; end; end; finally Strings.Free; end; end;
uses activex; var gid:Tguid; wclid:array[0..127]of widechar; start:integer; begin CoCreateGUID(gid); stringfromguid2(gid,wclid,sizeof(wclid) div 2); //get start position; edit1.text:=widechartostring(wclid); start:=length(edit1.text)-12; edit2.text:=copy(edit1.text,start,12); end;
看我的:(好像只能在Win2000下有效) function GetMACAddress(AdapterNo: Byte): String; var Adapter: TAdapterStatus; NCB: TNCB; begin FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBRESET); NCB.ncb_lana_num := Char(AdapterNo); if Netbios(@NCB) <> Char(NRC_GOODRET) then begin Result := '00:00:00:00:00:00'; Exit; end; FillChar(NCB, SizeOf(NCB), 0); NCB.ncb_command := Char(NCBASTAT); NCB.ncb_lana_num := Char(AdapterNo); 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 := '00:00:00:00:00:00'; 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;
//取网卡地址(MAC)列表
procedure NBGetMac(Strings: TStrings);
//取第一个非零的网卡地址
function NBGetFirstMac: String;
//判断指定网卡地址是否存在
function NBIsMacInList(Mac: String): Boolean;procedure NBGetMac(Strings: TStrings);
function HexBL(by: Byte): String;
begin
Result := Format('%x', [by]);
if Length(Result) < 2 then
Result := '0' + Result;
end;
var
NCB: TNCB;
Adapter: TAdapterStatus;
LanaEnum: TLanaEnum;
I, J: Integer;
Str: String;
begin
Strings.Clear;
ZeroMemory(@NCB,SizeOf(NCB)); NCB.ncb_command := Chr(NCBENUM);
NetBios(@NCB); NCB.ncb_buffer := @LanaEnum;
NCB.ncb_length := SizeOf(LanaEnum);
NCB.ncb_command := Chr(NCBENUM);
NetBios(@NCB); for I := 0 to Ord(LanaEnum.length) - 1 do
begin
ZeroMemory(@NCB,SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LanaEnum.lana[I];
NetBios(@NCB); ZeroMemory(@NCB,SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LanaEnum.lana[I];
StrPCopy(NCB.ncb_callname,'*');
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
NetBios(@NCB); Str := '';
for J := 0 to 5 do
begin
if J > 0 then Str := Str + '-';
Str := Str + HexBL(Byte(Adapter.adapter_address[J]));
end;
Strings.Add(Str);
end;
end;function NBGetFirstMac: String;
var
Strings: TStringList;
I, J: Integer;
begin
Result := '';
Strings := TStringList.Create;
try
NBGetMac(Strings);
for I := 0 to Strings.Count - 1 do
begin
for J := 1 to Length(Strings.Strings[I]) do
if (Strings.Strings[I][J] <> '0') and
(Strings.Strings[I][J] <> '-') then
begin
Result := Strings.Strings[I];
Break;
end;
if Result <> '' then Break;
end;
finally
Strings.Free;
end;
end;function NBIsMacInList(Mac: String): Boolean;
var
Strings: TStringList;
I: Integer;
begin
Result := False;
Strings := TStringList.Create;
try
NBGetMac(Strings);
for I := 0 to Strings.Count - 1 do
begin
if Strings.Strings[I] = Mac then
begin
Result := True;
Break;
end;
end;
finally
Strings.Free;
end;
end;
var
gid:Tguid;
wclid:array[0..127]of widechar;
start:integer;
begin
CoCreateGUID(gid);
stringfromguid2(gid,wclid,sizeof(wclid) div 2);
//get start position;
edit1.text:=widechartostring(wclid);
start:=length(edit1.text)-12;
edit2.text:=copy(edit1.text,start,12);
end;
function GetMACAddress(AdapterNo: Byte): String;
var
Adapter: TAdapterStatus;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := Char(AdapterNo);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := '00:00:00:00:00:00';
Exit;
end; FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBASTAT);
NCB.ncb_lana_num := Char(AdapterNo);
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 := '00:00:00:00:00:00';
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;