// 取本机 Mac // 硬盘上的,也忘记了从哪来的:) function Getmac: string; var ncb: TNCB; s: string; adapt: TASTAT; lanaEnum: TLanaEnum; i, j, m: integer; strPart, strMac: string; begin FillChar(ncb, SizeOf(TNCB), 0); ncb.ncb_command := Char(NCBEnum); ncb.ncb_buffer := PChar(@lanaEnum); ncb.ncb_length := SizeOf(TLanaEnum); s := Netbios(@ncb); for i := 0 to integer(lanaEnum.length) - 1 do begin FillChar(ncb, SizeOf(TNCB), 0); ncb.ncb_command := Char(NCBReset); ncb.ncb_lana_num := lanaEnum.lana[i]; Netbios(@ncb); Netbios(@ncb); FillChar(ncb, SizeOf(TNCB), 0); ncb.ncb_command := Chr(NCBAstat); ncb.ncb_lana_num := lanaEnum.lana[i]; ncb.ncb_callname := '* '; ncb.ncb_buffer := PChar(@adapt); ncb.ncb_length := SizeOf(TASTAT); m := 0; if (Win32Platform = VER_PLATFORM_WIN32_NT) then m := 1; if m = 1 then begin if Netbios(@ncb) = Chr(0) then strMac := ''; for j := 0 to 5 do begin strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2); strMac := strMac + strPart + '-'; end; SetLength(strMac, Length(strMac) - 1); end; if m = 0 then if Netbios(@ncb) <> Chr(0) then begin strMac := ''; for j := 0 to 5 do begin strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2); strMac := strMac + strPart + '-'; end; SetLength(strMac, Length(strMac) - 1); end; end; result := strmac; end;
adapt: TASTAT 这个变量类型在哪个单元中???我要uses
大家还有好的编译过的代码吗?(要能获得物理意义上的MAC的)
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,nb30;type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } function Getmac: string; public { Public declarations } end;type PASTAT = ^TASTAT; TASTAT = record adapter: TAdapterStatus; name_buf: TNameBuffer; end;var Form1: TForm1;implementationfunction TForm1.Getmac: string; var ncb: TNCB; s: string; adapt: TASTAT; lanaEnum: TLanaEnum; i, j, m: integer; strPart, strMac: string; begin FillChar(ncb, SizeOf(TNCB), 0); ncb.ncb_command := Char(NCBEnum); ncb.ncb_buffer := PChar(@lanaEnum); ncb.ncb_length := SizeOf(TLanaEnum); s := Netbios(@ncb); for i := 0 to integer(lanaEnum.length) - 1 do begin FillChar(ncb, SizeOf(TNCB), 0); ncb.ncb_command := Char(NCBReset); ncb.ncb_lana_num := lanaEnum.lana[i]; Netbios(@ncb); Netbios(@ncb); FillChar(ncb, SizeOf(TNCB), 0); ncb.ncb_command := Chr(NCBAstat); ncb.ncb_lana_num := lanaEnum.lana[i]; ncb.ncb_callname := '* '; ncb.ncb_buffer := PChar(@adapt); ncb.ncb_length := SizeOf(TASTAT); m := 0; if (Win32Platform = VER_PLATFORM_WIN32_NT) then m := 1; if m = 1 then begin if Netbios(@ncb) = Chr(0) then strMac := ''; for j := 0 to 5 do begin strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2); strMac := strMac + strPart + '-'; end; SetLength(strMac, Length(strMac) - 1); end; if m = 0 then if Netbios(@ncb) <> Chr(0) then begin strMac := ''; for j := 0 to 5 do begin strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2); strMac := strMac + strPart + '-'; end; SetLength(strMac, Length(strMac) - 1); end; end; result := strmac; end;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(Getmac) ; end;end.
Function GetAdapterMac(ANo:Integer):String;
var
Ncb:TNcb;
Adapter:TAdapterStatus;
Lanaenum:TLanaenum;
IntIdx:Integer; //
cRc:Char;
StrTemp:String;
begin
Result:='';
Try
ZeroMemory(@Ncb,SizeOf(Ncb));
Ncb.ncb_command:=Chr(NCbenum);
NetBios(@NCb);
Ncb.ncb_buffer:=@Lanaenum; //再处理enum命令
Ncb.ncb_length:=SizeOf(Lanaenum);
cRc:=NetBios(@Ncb);
if Ord(cRc)<>0 then
exit;
ZeroMemory(@Ncb,SizeOf(Ncb)); //适配器清零
Ncb.ncb_command:=Chr(NcbReset);
Ncb.ncb_lana_num:=Lanaenum.lana[aNo];
cRc:=NetBios(@Ncb);
if Ord(cRc)<>0 then
exit;
//得到适配器状态
ZeroMemory(@Ncb,SizeOf(Ncb));
Ncb.ncb_command:=Chr(NcbAstat);
Ncb.ncb_lana_num:=Lanaenum.lana[aNo];
StrPcopy(Ncb.ncb_callname,'*');
Ncb.ncb_buffer:=@Adapter;
Ncb.ncb_length:=SizeOf(Adapter);
NetBios(@Ncb); //将mac地址转换成字符串输出
StrTemp:='';
For IntIdx:=0 to 5 do
StrTemp:=StrTemp+IntToHex(Integer(Adapter.adapter_address[intIdx]),2);
Result:=StrTemp;
Finally
end;
end;
所以唯一标示一台计算机是很难的
// 取本机 Mac
// 硬盘上的,也忘记了从哪来的:) function Getmac: string;
var
ncb: TNCB;
s: string;
adapt: TASTAT;
lanaEnum: TLanaEnum;
i, j, m: integer;
strPart, strMac: string;
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBEnum);
ncb.ncb_buffer := PChar(@lanaEnum);
ncb.ncb_length := SizeOf(TLanaEnum);
s := Netbios(@ncb);
for i := 0 to integer(lanaEnum.length) - 1 do
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBReset);
ncb.ncb_lana_num := lanaEnum.lana[i];
Netbios(@ncb);
Netbios(@ncb);
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Chr(NCBAstat);
ncb.ncb_lana_num := lanaEnum.lana[i];
ncb.ncb_callname := '* ';
ncb.ncb_buffer := PChar(@adapt);
ncb.ncb_length := SizeOf(TASTAT);
m := 0;
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
m := 1;
if m = 1 then
begin
if Netbios(@ncb) = Chr(0) then
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart + '-';
end;
SetLength(strMac, Length(strMac) - 1);
end;
if m = 0 then
if Netbios(@ncb) <> Chr(0) then
begin
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart + '-';
end;
SetLength(strMac, Length(strMac) - 1);
end;
end;
result := strmac;
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,nb30;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function Getmac: string;
public
{ Public declarations }
end;type
PASTAT = ^TASTAT;
TASTAT = record
adapter: TAdapterStatus;
name_buf: TNameBuffer;
end;var
Form1: TForm1;implementationfunction TForm1.Getmac: string;
var
ncb: TNCB;
s: string;
adapt: TASTAT;
lanaEnum: TLanaEnum;
i, j, m: integer;
strPart, strMac: string;
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBEnum);
ncb.ncb_buffer := PChar(@lanaEnum);
ncb.ncb_length := SizeOf(TLanaEnum);
s := Netbios(@ncb);
for i := 0 to integer(lanaEnum.length) - 1 do
begin
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Char(NCBReset);
ncb.ncb_lana_num := lanaEnum.lana[i];
Netbios(@ncb);
Netbios(@ncb);
FillChar(ncb, SizeOf(TNCB), 0);
ncb.ncb_command := Chr(NCBAstat);
ncb.ncb_lana_num := lanaEnum.lana[i];
ncb.ncb_callname := '* ';
ncb.ncb_buffer := PChar(@adapt);
ncb.ncb_length := SizeOf(TASTAT);
m := 0;
if (Win32Platform = VER_PLATFORM_WIN32_NT) then
m := 1;
if m = 1 then
begin
if Netbios(@ncb) = Chr(0) then
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart + '-';
end;
SetLength(strMac, Length(strMac) - 1);
end;
if m = 0 then
if Netbios(@ncb) <> Chr(0) then
begin
strMac := '';
for j := 0 to 5 do
begin
strPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);
strMac := strMac + strPart + '-';
end;
SetLength(strMac, Length(strMac) - 1);
end;
end;
result := strmac;
end;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(Getmac) ;
end;end.