rt.

解决方案 »

  1.   


    //uses Windows, SysUtils, NB30, 以下为类型定义及函数代码 const sNetBiosError = "NetBIOS错误%d"; type TMACAddress = packed array[0..5] of Byte; ENetBiosError = class( Exception ); TAStat = record Adapt : TAdapterStatus;NameBuff : array[0..30] of TNameBuffer; 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; procedure TForm1.Button1Click(Sender: TObject);
    var
     loc,loc1:integer;
      addr:string;begin
     Addr:=Trim(edit1.Text);
     loc:=pos('#',addr);
     loc1:=loc-1; while (ord(addr[loc1])>48) and (ord(addr[loc1])<57)  do
      loc1:=loc1-1; label1.Caption :=copy(addr,1,loc1);
     label2.Caption :=copy(addr,loc1+1,(loc-1-loc1));
    end;
      

  2.   

    ...
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, nb30;
    ........
    implementation{$R *.dfm}function TForm1.NBGetAdapterAddress(a :Integer) : string;
    var
      NC :TNCB;
      ADAPTE :TADAPTERSTATUS;
      LANAENU :TLANAENUM;
      intId :Integer;
      cR :Char;
      strTem :string;
    begin
      Result := '';
      try
        ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBENUM);
        cR := NetBios(@NC);    //Reissue enum command
        NC.ncb_buffer := @LANAENU;
        NC.ncb_length := SizeOf(LANAENU);
        cR := NetBios(@NC);
        If Ord(cR) <> 0 then
          exit;    ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBRESET);
        NC.ncb_lana_num := LANAENU.lana[a];
        cR := NetBios(@NC);
        if Ord(cR) <> 0 then
          exit;    ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBASTAT);
        NC.ncb_lana_num := LANAENU.lana[a];
        StrPCopy(NC.ncb_callname, '*');
        NC.ncb_buffer := @ADAPTE;
        NC.ncb_length := SizeOf(ADAPTE);
        cR := NetBios(@NC);
        strTem := '';
        for intId := 0 To 5 do
          strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]), 2);
        Result := strTem;
      finally
      end;end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text := NBGetAdapterAddress(0);
      Beep;
    end;
    end.
    dfimplementation{$R *.dfm}function TForm1.NBGetAdapterAddress(a :Integer) : string;
    var
      NC :TNCB;
      ADAPTE :TADAPTERSTATUS;
      LANAENU :TLANAENUM;
      intId :Integer;
      cR :Char;
      strTem :string;
    begin
      Result := '';
      try
        ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBENUM);
        cR := NetBios(@NC);    //Reissue enum command
        NC.ncb_buffer := @LANAENU;
        NC.ncb_length := SizeOf(LANAENU);
        cR := NetBios(@NC);
        If Ord(cR) <> 0 then
          exit;    ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBRESET);
        NC.ncb_lana_num := LANAENU.lana[a];
        cR := NetBios(@NC);
        if Ord(cR) <> 0 then
          exit;    ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBASTAT);
        NC.ncb_lana_num := LANAENU.lana[a];
        StrPCopy(NC.ncb_callname, '*');
        NC.ncb_buffer := @ADAPTE;
        NC.ncb_length := SizeOf(ADAPTE);
        cR := NetBios(@NC);
        strTem := '';
        for intId := 0 To 5 do
          strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]), 2);
        Result := strTem;
      finally
      end;end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text := NBGetAdapterAddress(0);
      Beep;
    end;
    It is compiled!
      

  3.   

    ...
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, nb30;
    ........
    implementation{$R *.dfm}function TForm1.NBGetAdapterAddress(a :Integer) : string;
    var
      NC :TNCB;
      ADAPTE :TADAPTERSTATUS;
      LANAENU :TLANAENUM;
      intId :Integer;
      cR :Char;
      strTem :string;
    begin
      Result := '';
      try
        ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBENUM);
        cR := NetBios(@NC);    //Reissue enum command
        NC.ncb_buffer := @LANAENU;
        NC.ncb_length := SizeOf(LANAENU);
        cR := NetBios(@NC);
        If Ord(cR) <> 0 then
          exit;    ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBRESET);
        NC.ncb_lana_num := LANAENU.lana[a];
        cR := NetBios(@NC);
        if Ord(cR) <> 0 then
          exit;    ZeroMemory(@NC, SizeOf(NC));
        NC.ncb_command := Chr(NCBASTAT);
        NC.ncb_lana_num := LANAENU.lana[a];
        StrPCopy(NC.ncb_callname, '*');
        NC.ncb_buffer := @ADAPTE;
        NC.ncb_length := SizeOf(ADAPTE);
        cR := NetBios(@NC);
        strTem := '';
        for intId := 0 To 5 do
          strTem := strTem+ InttoHex(Integer(ADAPTE.adapter_address[intId]), 2);
        Result := strTem;
      finally
      end;end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text := NBGetAdapterAddress(0);
      Beep;
    end;
    end.It is compiled!
    用這個,上面那個打多了東西。絕對可行!