![]() |
MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters
Hallo zusammen,
ich möchte meine MAC-Adressen einlesen. Zur Zeit habe ich 2 LAN-Karten in meinem Rechner installiert. Mit diesem unten angegebenen Code, der im Internet herumspuckt, werden mir auch alle MAC-Adressen angezeigt. Jedoch bringt mir die reine MAC-Adresse nicht sonderlich viel, da der Benutzer von der MAC-Adresse nicht sofort auf die LAN-Karte zurück schließen kann. Ziel ist es somit eine Combobox oder Listbox mit den gefundenen MAC-Adressen SOWIE der Netzwerkartenbezeichnung zufüllen, um dem Benutzer die Möglichkeit zu geben die gewünschte MAC-Adresse auswählen. z.B: gefundene MAC-Adressen: 1. 00-70-1A-xx-xx-xx - Cisco-Linksys, LLC 2. 00-30-05-xx-xx-xx - Fujitsu Siemens Computers Oder bieten die verwendeten TLanaEnum und TNCB Datentypen, bereits eine Variable in der der Titel des aktuell angewählten LAN-Adapters zwischen gespeichert wird? Vergebliches Suchen in diversen Delphi-Foren sowie Google brachte keine Antwort. Ich würde mich über eine hilfreiche Antwort freuen. Gruß Frettchenstall
Delphi-Quellcode:
// Pleace notice, I called the Lan Adapters within a function Lana
// Outside a function I named them Adapter FUNCTION GetMacAddress(AdapterID : Integer) : String; TYPE TAdapterStatusA = record Adapt : TAdapterStatus; NameBuff : array[0..30] of TNameBuffer; end; VAR NCB :TNCB; //Network Control Block ReturnCode :Char; //Retun Code AdapterStatus :TAdapterStatus; BEGIN //Clear NCB Structure FillChar( NCB, SizeOf(NCB), 0 ); //Programm NBC to fulfill a reset. It doublecheck if the Lana is present. //Can be removed, when used with GetAdapters. NCB.ncb_command := Char(NCBRESET); NCB.ncb_lana_num := Char(AdapterID); //Process NCB to NetBios ReturnCode := NetBios(@NCB); //Check if query was successfull, if returnCode = #0 IF ReturnCode <> #0 THEN BEGIN // Return the negative returncode // Error check would be "if ReturnCode[0]='-' Then..." Result:=Char(Ord(ReturnCode)*-1); Exit; END; //Clear NCB Structure FillChar( NCB, SizeOf(NCB), 0 ); //Programm NBC to ask for the MAC associated with the LanaID NCB.ncb_command := Char(NCBASTAT); NCB.ncb_lana_num := Char(AdapterID); NCB.ncb_buffer := @AdapterStatus; NCB.ncb_length := SizeOf(AdapterStatus); StrCopy(NCB.ncb_callname, '* ' ); //Process NCB to NetBios ReturnCode := Netbios( @NCB ); //Check if query was successfull, if returnCode = #0 IF ReturnCode <> #0 THEN BEGIN // Return the negative returncode Result:=Char(Ord(ReturnCode)*-1); Exit; END; //Return formated MAC result:=Format('%2.2x-%2.2x-%2.2x-%2.2x-%2.2x-%2.2x', [ORD(AdapterStatus.Adapter_address[0]), ORD(AdapterStatus.Adapter_address[1]), ORD(AdapterStatus.Adapter_address[2]), ORD(AdapterStatus.Adapter_address[3]), ORD(AdapterStatus.Adapter_address[4]), ORD(AdapterStatus.Adapter_address[5])]) end; //Function GetAdapter //================= // // This function will return the the total nummber of all lana's istalled // and a unique the id of each lana. // E.g. on a system containing lana's 0, 2 and 3, a structure with // length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned. FUNCTION GetAdapters: TLanaEnum; VAR NCB :TNCB; //Network Control Block LanaEnum :TLanaEnum; //Enumeration of Lan Adapters ReturnCode :Char; //Retun Code BEGIN //Clear NCB Structure FillChar(NCB, SizeOf(NCB), 0); //Clear LanaEnum Stucture FillChar(LanaEnum, SizeOf(TLanaEnum), 0); //Programm NBC to ask for the number of Lana's NCB.ncb_Command := CHAR(NCBENUM); NCB.ncb_buffer := @LanaEnum; NCB.ncb_length := Sizeof(LanaEnum); //Ask NetBios ReturnCode := NetBios(@NCB); //Check if query was successfull, if returnCode = #0 IF ReturnCode <> #0 THEN BEGIN LanaEnum.Length := CHAR(0); LanaEnum.Lana[0] := ReturnCode; END; // Return valid LanaEnum Structure Result := LanaEnum; END; PROCEDURE TForm1.Button1Click(Sender: TObject); VAR L_Enum :TLanaEnum; i :INTEGER; BEGIN L_Enum := GetAdapters; { enumerate lanas for WIN NT } IF L_Enum.Length = '0' THEN BEGIN Exit; END; FOR i:= 0 TO (BYTE(L_Enum.Length) - 1) DO BEGIN ListBox1.Items.Add(getMACaddress(BYTE(L_Enum.Lana[i]))); END; END; |
Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters
|
Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters
Auf welche Variable muss ich denn zugreifen, damit ich die LAN-Adapterbezeichnung erhalte?
Und wie genau mache ich das? |
Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters
Vielen Dank, das Problem hat sich soweit gelöst.
|
Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters
Zitat:
|
Re: MAC-Adresse einlesen plus Bezeichnung des LAN-Adapters
Nein, es soll ja niemand unwissend sterben müssen! :zwinker:
Da die Unterstützung von Delphi zum Zugriff auf das Windows System sehr dürftig ist, habe ich die WMI (Windows Management Instrumentation) benutzt. Dort ließen sich mittels der Klasse Win32_NetworkAdapter alle benötigten Informationen auslesen. Also die von mir benötigte MAC-Adresse genauso wie der ProductName (also der LAN-Adapterbezeichnung des Herstellers). ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz