如何取得网卡的编号!好像说网卡的编号是世上唯一的! 如何取得网卡的编号!好像说网卡的编号是世上唯一的! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 function GetMacAddresses(const Machine: string; const Addresses: TStrings): Integer;var NCB: TNCB; Enum: TLanaEnum; I, L, NameLen: Integer; Adapter: ASTAT; MachineName: string;begin Result := -1; Addresses.Clear; MachineName := UpperCase(Machine); if MachineName = '' then MachineName := '*'; NameLen := Length(MachineName); L := NCBNAMSZ - NameLen; if L > 0 then begin SetLength(MachineName, NCBNAMSZ); FillChar(MachineName[NameLen + 1], L, ' '); end; FillChar(NCB, SizeOf(NCB), #0); NCB.ncb_command := NCBENUM; NCB.ncb_buffer := Pointer(@Enum); NCB.ncb_length := SizeOf(Enum); if NetBios(@NCB) = NRC_GOODRET then begin Result := Enum.Length; for I := 0 to Ord(Enum.Length) - 1 do begin FillChar(NCB, SizeOf(NCB), #0); NCB.ncb_command := NCBRESET; NCB.ncb_lana_num := Enum.lana[I]; if NetBios(@NCB) = NRC_GOODRET then begin FillChar(NCB, SizeOf(NCB), #0); NCB.ncb_command := NCBASTAT; NCB.ncb_lana_num := Enum.lana[I]; Move(MachineName[1], NCB.ncb_callname, SizeOf(NCB.ncb_callname)); NCB.ncb_buffer := PChar(@Adapter); NCB.ncb_length := SizeOf(Adapter); if NetBios(@NCB) = NRC_GOODRET then Addresses.Add(AdapterToString(Adapter.adapt)); end; end; end;end; How to Get MacAddress of LAN cardunit MACAddress;interfaceuses SysUtils;type TMACAddress = packed array[0..5] of Byte; ENetBiosError = class(Exception);function LanAdapterCount : Integer;function GetMacAddress(AdapterNum: Integer):TMACAddress;implementationuses NB30, Windows;resourcestring sNetBiosError = 'NetBIOS error %d';type TAStat = record Adapt : TAdapterStatus; NameBuff : array[0..30] of TNameBuffer; end;function LanAdapterCount : Integer;var Ncb : TNCB; uRetCode : Char; lEnum : TLanaEnum;begin FillChar( NCB, SizeOf(NCB), 0 ); with NCB do begin ncb_command := Char( NCBENUM ); ncb_buffer := @lEnum; ncb_length := SizeOf(lEnum); end; uRetCode := Netbios( @Ncb ); if uRetCode <> #0 then raise Exception.CreateFmt( sNetBIOSError, [Ord(uRetCode)]); Result := Ord(lenum.length);end;function GetMacAddress(AdapterNum:Integer):TMACAddress;var Ncb : TNCB; uRetCode : Char; J : Integer; Adapter : TAStat;begin FillChar( NCB, SizeOf(NCB), 0 ); with NCB do begin ncb_command := Char(NCBRESET); ncb_lana_num := Char( AdapterNum ); end; uRetCode := Netbios( @Ncb ); if uRetCode <> #0 then raise Exception.CreateFmt(sNetBIOSError, [Ord(uRetCode)]); FillChar( NCB, SizeOf(NCB), 0 ); with NCB do begin ncb_command := Char(NCBASTAT); ncb_lana_num := Char( AdapterNum ); StrCopy( ncb_callname, '* ' ); ncb_buffer := @Adapter; ncb_length := sizeof(Adapter); end; uRetCode := Netbios( @Ncb ); if uRetCode <> #0 then raise Exception.CreateFmt(sNetBIOSError, [Ord(uRetCode)]); for J := 0 to 5 do Result[J] := Ord( Adapter.Adapt.Adapter_address[J]);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;要uses nb30单元 GetAdapterMac(0);//返回第一块网卡号这样就可以了给分吧! windows NT 4.0 SP6 平台下 安装 DELPHI6 总是失败 怎样将整个窗体包括标题作为一个位图复制到剪贴板 Delphi 成批新增記錄 结交天下豪杰(散分) timer的循环调用 新手问题: 关于触发器的问题. 关于流文件的最基本的简单问题请教。。 如何设置ShellTreeView为只读,不能修改内容? 通过com口的文件传送和接收 进度条怎么没反应啊?该怎么做?还有就是double类型怎么转为integer类型啊? 散分,又一年了
var
NCB: TNCB;
Enum: TLanaEnum;
I, L, NameLen: Integer;
Adapter: ASTAT;
MachineName: string;
begin
Result := -1;
Addresses.Clear;
MachineName := UpperCase(Machine);
if MachineName = '' then
MachineName := '*';
NameLen := Length(MachineName);
L := NCBNAMSZ - NameLen;
if L > 0 then
begin
SetLength(MachineName, NCBNAMSZ);
FillChar(MachineName[NameLen + 1], L, ' ');
end;
FillChar(NCB, SizeOf(NCB), #0);
NCB.ncb_command := NCBENUM;
NCB.ncb_buffer := Pointer(@Enum);
NCB.ncb_length := SizeOf(Enum);
if NetBios(@NCB) = NRC_GOODRET then
begin
Result := Enum.Length;
for I := 0 to Ord(Enum.Length) - 1 do
begin
FillChar(NCB, SizeOf(NCB), #0);
NCB.ncb_command := NCBRESET;
NCB.ncb_lana_num := Enum.lana[I];
if NetBios(@NCB) = NRC_GOODRET then
begin
FillChar(NCB, SizeOf(NCB), #0);
NCB.ncb_command := NCBASTAT;
NCB.ncb_lana_num := Enum.lana[I];
Move(MachineName[1], NCB.ncb_callname, SizeOf(NCB.ncb_callname));
NCB.ncb_buffer := PChar(@Adapter);
NCB.ncb_length := SizeOf(Adapter);
if NetBios(@NCB) = NRC_GOODRET then
Addresses.Add(AdapterToString(Adapter.adapt));
end;
end;
end;
end;
TMACAddress = packed array[0..5] of Byte;
ENetBiosError = class(Exception);function LanAdapterCount : Integer;function GetMacAddress(AdapterNum: Integer):TMACAddress;
implementationuses NB30, Windows;resourcestring
sNetBiosError = 'NetBIOS error %d';type
TAStat = record
Adapt : TAdapterStatus;
NameBuff : array[0..30] of TNameBuffer;
end;function LanAdapterCount : Integer;
var
Ncb : TNCB;
uRetCode : Char;
lEnum : TLanaEnum;
begin
FillChar( NCB, SizeOf(NCB), 0 );
with NCB do begin
ncb_command := Char( NCBENUM );
ncb_buffer := @lEnum;
ncb_length := SizeOf(lEnum);
end;
uRetCode := Netbios( @Ncb );
if uRetCode <> #0 then
raise Exception.CreateFmt( sNetBIOSError,
[Ord(uRetCode)]);
Result := Ord(lenum.length);
end;function GetMacAddress(AdapterNum:Integer):TMACAddress;
var
Ncb : TNCB;
uRetCode : Char;
J : Integer;
Adapter : TAStat;
begin
FillChar( NCB, SizeOf(NCB), 0 );
with NCB do begin
ncb_command := Char(NCBRESET);
ncb_lana_num := Char( AdapterNum );
end;
uRetCode := Netbios( @Ncb );
if uRetCode <> #0 then
raise Exception.CreateFmt(sNetBIOSError,
[Ord(uRetCode)]);
FillChar( NCB, SizeOf(NCB), 0 );
with NCB do begin
ncb_command := Char(NCBASTAT);
ncb_lana_num := Char( AdapterNum );
StrCopy( ncb_callname, '* ' );
ncb_buffer := @Adapter;
ncb_length := sizeof(Adapter);
end;
uRetCode := Netbios( @Ncb );
if uRetCode <> #0 then
raise Exception.CreateFmt(sNetBIOSError,
[Ord(uRetCode)]);
for J := 0 to 5 do
Result[J] := Ord( Adapter.Adapt.Adapter_address[J]);
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;
要uses nb30单元
GetAdapterMac(0);//返回第一块网卡号
这样就可以了给分吧!