Announcement

Collapse
No announcement yet.

Physikalische Adresse der Netzwerkkarte

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Physikalische Adresse der Netzwerkkarte

    Hallo<br>
    Ich möchte die physikalische Adresse der Netzwerkkarte herausfinden, Andreas Kosch hatte im Ordner "Allgemeines" eine Funktion gelistet, die das können soll.<br>
    Allein, bei mir liefert sie mit jedem Aufruf ein anderes (falsches) Ergebnis.<br>
    Die physikalische Adresse meiner Netzwerkkarte (abgelesen aus Netzwerkverbindungsdetails direkt aus Windows), lautet<br>
    00-D2-B3-1A-D0-8B<br>
    Die Funktion liefert mir bei 5 Aufrufen<br>
    1. E6-8C-CA-EA-31-90<br>
    2. 79-29-F4-D8-9A-E1<br>
    3. CA-2F-C8-DB-A4-69<br>
    4. BC-00-15-CC-93-08<br>
    5. 32-F0-06-F2-4D-DC<br><br>

    Mein Quellcode lautet wie folgt:
    <pre>
    uses ComObj, ActiveX;

    function GetMAC: String;
    var
    sTmp : String;
    i : Integer;
    aGUID : TGUID;
    begin
    OleCheck(CoCreateGUID(aGUID));
    sTmp := '';
    for i:= 2 to 7 do
    sTmp := sTmp + IntToHex(aGUID.D4[i],2);
    Result := sTmp;
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    edit1.Text:=GetMac;
    end;
    </pre>

    Ist da vom Code her ein Fehler drin oder ist die Funktion GetMac einfach fehlerhaft?<br>
    Danke im Voraus...<br>
    Patrick

  • #2
    Hallo,

    &gt;..vom Code her ein Fehler drin ..

    ich glaube, ich muss mein Archiv aktualisieren und nochmals das Kleingedruckte nachlesen :-)

    Der 2. Schuß über die alten NetBios-Funktionen sollte das Richtige zurückliefern. Bei mir ist das folgende Ergebnis mit dem Ergebnis des Windows-Zubehörs ipconfig (Aufruf: <i>ipconfig /all</i>) identisch:
    <pre>
    uses nb30;

    function GetMAC : shortstring ;
    type
    pt1 = ^t1 ;
    t1 = record
    PAS1 : TAdapterStatus ;
    NB1 : TNameBuffer ;
    end ;
    var
    PNcb1 : PNCB ;
    p1 : t1 ;
    St1 : String ;
    begin
    New (PNcb1) ;
    Fillchar (PNcb1^, sizeof(PNcb1),0 ) ;
    Pncb1^.ncb_command := char(NCBRESET) ;
    Pncb1^.ncb_lana_num := char(0) ;
    Netbios( PNcb1 ) ;
    Fillchar (PNcb1^, sizeof(PNcb1),0 ) ;
    Pncb1^.ncb_command := char(NCBASTAT) ;
    Pncb1^.ncb_lana_num := char(0) ;
    StrPCopy(Pncb1^.ncb_callname, '* ') ;
    Pncb1^.ncb_buffer := @p1 ;
    Pncb1^.ncb_length := sizeof(p1) ;
    Netbios( PNcb1 ) ;
    St1 := Format('%x-%x-%x-%x-%x-%x',[
    ord(p1.pas1.adapter_address[0]), ord(p1.pas1.adapter_address[1]),
    ord(p1.pas1.adapter_address[2]), ord(p1.pas1.adapter_address[3]),
    ord(p1.pas1.adapter_address[4]), ord(p1.pas1.adapter_address[5])]);
    Dispose (PNcb1) ;
    GetMAC := St1 ;
    end ;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    ShowMessage(GetMAC);
    end;
    </pre&gt

    Comment


    • #3
      Danke schön!<br>
      So funktionierts...<br&gt

      Comment


      • #4
        Hallo,

        über beide Methoden bekomme ich bei mir lediglich meinen Computernamen zurückgeliefert!
        Was mache ich da falsch?

        Gruß Günte

        Comment

        Working...
        X