如何得到本机见网卡的物理地址?请提供函数给我好吗?(50分)

  • 主题发起人 主题发起人 LanHer
  • 开始时间 开始时间
L

LanHer

Unregistered / Unconfirmed
GUEST, unregistred user!
问题如标题。
 
获得本机的MAC地址
uses nb30;
Function NBGetAdapterAddress(a:integer) : String;

Implementation

{$R *.DFM}

Procedure TForm1.Button1Click(Sender : TObject);
Begin
label1.Caption:=NBGetAdapterAddress
(StrtoInt(Edit1.Text));
End;

Function NBGetAdapterAddress(a:Integer) : String;
Var
NCB : TNCB;
// Netbios control block file:
//NetBios控制块
ADAPTER : TADAPTERSTATUS;
// Netbios adapter status
//取网卡状态
LANAENUM : TLANAENUM; // Netbios lana
intIdx : Integer;
// Temporary work value
//临时变量
cRC : Char;
// Netbios return code
//NetBios返回值
strTemp : String;
// Temporary string
//临时变量
Begin
// Initialize
Result := '';
Try
// Zero control blocl
ZeroMemory(@NCB, SizeOf(NCB));

// Issue enum command
NCB.ncb_command := Chr(NCBENUM);
cRC := NetBios(@NCB);

// Reissue enum command
NCB.ncb_buffer := @LANAENUM;
NCB.ncb_length := SizeOf(LANAENUM);
cRC := NetBios(@NCB);
If Ord(cRC)<>0 Then exit;

// Reset adapter
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBRESET);
NCB.ncb_lana_num := LANAENUM.lana[a];
cRC := NetBios(@NCB);
If Ord(cRC) <>0 Then exit;

// Get adapter address
ZeroMemory(@NCB, SizeOf(NCB));
NCB.ncb_command := Chr(NCBASTAT);
NCB.ncb_lana_num := LANAENUM.lana[a];
StrPCopy(NCB.ncb_callname, '*');
NCB.ncb_buffer := @ADAPTER;
NCB.ncb_length := SizeOf(ADAPTER);
cRC := NetBios(@NCB);

// Convert it to string
strTemp := '';
For intIdx := 0 To 5 Do strTemp := strTemp +
InttoHex(Integer
(ADAPTER.adapter_address[intIdx]),2);
Result := strTemp;
Finally
End;
End;

End.

 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1275645
 
Function NBGetAdapterAddress(a:integer) : String

我目前用的就是这个函数,可是如果我用了TCP/IP以外的协议,每次启动得到的结果不同。
 
不会吧?
你是不是还安装了拨号适配器?
 
这样,你如果是98,那么敲winipcfg,如果是2000,那么敲ipconfig -all,看你得到的网卡 Mac是那一个的。
是否和他所提示的相同?
看是否为拨号适配器的?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部