精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>Delphi 网络编程>>Re:delphi中如何获得网卡的mac地址?

主题:Re:delphi中如何获得网卡的mac地址?
发信人: teleme(PassWord)
整理人: teleme(2001-05-29 17:03:33), 站内信件
另外一个

//加入nb30.pas单元
unit Unit1;

interface

uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls, nb30;<<------------nb30单元要包含

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
function NBGetAdapterAddress(a: integer): string;
private
{ Private declarations }

public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);
begin
Showmessage('您的第' + edit1.text + '个适配器的MAC地址为' + NBGetAdapterAddress(StrtoInt(Edit1.Text)));
end;

function TForm1.NBGetAdapterAddress(a: integer): string;
//a指定多个网卡适配器中的哪一个0,1,2...
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.



----
忙,忙,忙。 
忙,忙,忙。
忙,忙,忙。
 
再忙也得告诉我
  

[关闭][返回]