Hi DPler,
diesen Beitrag habe ich erstmalig bei delphi3000.com am 9.3.2001 veröffentlich. Nach und nach werde ich einige Beiträge von dort hier einbringen.
Das Original ist aus der
Borland Community und in C++. Die Umwandlung nach Delphi stammt aus meiner Feder
Die MAC Adresse kann i.a. dazu genutzt werden, um einen Computer ein-ein-deutig zu identifizieren. Jedoch gibt es inzwischen einige, wenige Netzwerkkarten, welche eine Manipulation der MAC Adresse zulassen. Das bringt uns noch dazu: Nur Rechner mit einer Netzwerkkarte haben eine MAC Adresse, da dieser auf den Netzwerkkarten gespeichert ist.
Nächste Einschränkung: Die Lösung funktioniert ausschliesslich auf Windows Rechnern (getestet unter NT4/2000 Server; Delphi 5 Entp.), auf welchen auch das NetBIOS Protokoll installiert ist.
Der Code ist eigentlich recht simpel und hat daher keine Kommentare. Ein Hinweis sei mir aber noch gestattet. Die
Unit NB30 muss in die
uses Klausel aufgenommen werden.
Delphi-Quellcode:
uses
NB30;
function GetAdapterInfo(Lana: Char): String;
var
Adapter: TAdapterStatus;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBRESET);
NCB.ncb_lana_num := Lana;
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'mac not found';
Exit;
end;
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBASTAT);
NCB.ncb_lana_num := Lana;
NCB.ncb_callname := '*';
FillChar(Adapter, SizeOf(Adapter), 0);
NCB.ncb_buffer := @Adapter;
NCB.ncb_length := SizeOf(Adapter);
if Netbios(@NCB) <> Char(NRC_GOODRET) then
begin
Result := 'mac not found';
Exit;
end;
Result :=
IntToHex(Byte(Adapter.adapter_address[0]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[1]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[2]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[3]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[4]), 2) + '-' +
IntToHex(Byte(Adapter.adapter_address[5]), 2);
end;
function GetMACAddress: string;
var
AdapterList: TLanaEnum;
NCB: TNCB;
begin
FillChar(NCB, SizeOf(NCB), 0);
NCB.ncb_command := Char(NCBENUM);
NCB.ncb_buffer := @AdapterList;
NCB.ncb_length := SizeOf(AdapterList);
Netbios(@NCB);
if Byte(AdapterList.length) > 0 then
Result := GetAdapterInfo(AdapterList.lana[0])
else
Result := 'mac not found';
end;
Viel Spass...
[edit=flomei]Wir "räumen auf", daher Titel geändert... Mfg, flomei[/edit]