Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi MAC von echter Netzwerkkarte finden? (https://www.delphipraxis.net/89497-mac-von-echter-netzwerkkarte-finden.html)

SearchBot 1. Apr 2007 01:15


MAC von echter Netzwerkkarte finden?
 
Hallo,
mit den Indy-Komponenten bekomme ich die MAC-Adresse raus.
Dummerweise von allen Netzwerkkarten, also auch von virtuellen.

Ich möchte aber nur diejenige, die auch dann vorhanden ist, wenn keine USB/PCMCIA oder ähnliche entfernbare Netzwerkadapter angeschlossen werden (oder gar nur Treiber/Dummykarten/VirtualPC/Machine-"Karten"). Also nur genau die Karte/chip, die fest eingebaut ist/auf Mainboard integriert ist.

Dabei ist mit aufgefallen, daß diese einen IRQ hat, alle anderen nicht (?).
Also müßte ich prüfen, ob die Netzwerkkarte, zu der ich die MAC habe, einen IRQ besitzt.

Nur, wie bekomme ich das heraus??

Gehstock 1. Apr 2007 09:30

Re: MAC von echter Netzwerkkarte finden?
 
Delphi-Quellcode:
// retrieve System MAC Addresses via WMI
//

const
   // define used constants
   WMI_LOCAL_COMPUTER = '.';
   WMI_SYSTEM_NAMESPACE = 'root\CIMV2';
   WMI_CLASS_NIC = 'Win32_NetworkAdapter';
   WMI_ATTRIB_MAC = 'MACAddress';
//function getSystemMACAddresses:String;
procedure getSystemMACAddresses(MAC: TStringlist);
var
   l_WMILocator: ISWbemLocator;           // Locator, gets Services
   l_WMIServices: ISWbemServices;        // Services, gets Object Definitions
   l_WMIObjectDefinition: ISWbemObject;  // Definition, gets Set of Objetcs
   l_WMIObjectSet: SWbemObjectSet;        // ObjectSet, gets Enum over Instances
   l_WMIObjectInstances: IEnumVariant;     // Enum of Instances, gets Object
   l_WMIObject: ISWbemObject;              // Object, gets Sets of his properties
   l_WMIPropertySet: ISWbemPropertySet;  // PropertySet, gets single property
   l_WMIProperty: ISWbemProperty;        // Property, gets Value

   l_TempObj: OleVariant;                 // temporary used values
   l_ObjValue: Cardinal;
   TmpMAC : TStringList;
begin
   // create the return object
   TmpMAC := TStringList.Create;

   // retrieve object enum through WMI classes
   l_WMILocator := CoSWbemLocator.Create;
   l_WMIServices := L_WMILocator.ConnectServer(WMI_LOCAL_COMPUTER, WMI_SYSTEM_NAMESPACE, '', '', '', '', 0, nil);
   l_WMIObjectDefinition := l_WMIServices.Get(WMI_CLASS_NIC, wbemFlagUseAmendedQualifiers, nil);
   l_WMIObjectSet := l_WMIObjectDefinition.Instances_(0, nil);
   l_WMIObjectInstances := (l_WMIObjectSet._NewEnum) as IEnumVariant;

   // iterate through enum values (WbemObjects) and get the property values
   while (l_WMIObjectInstances.Next(1, l_TempObj, l_ObjValue) = S_OK) do
   begin
      l_WMIObject:= IUnknown(l_TempObj) as SWBemObject;

      l_WMIPropertySet := l_WMIObject.Properties_;
      l_WMIProperty := l_WMIPropertySet.Item(WMI_ATTRIB_MAC, 0);

      if not VarIsNull(l_WMIProperty.Get_Value) then
         TmpMAC.Add(l_WMIProperty.Get_Value);
   end;
   TmpMAC.Sort;
    MAC.Assign(TmpMAC);
    TmpMAC.Free;
end;
aufruf so
Delphi-Quellcode:
getSystemMACAddresses(TStringList(memo1.lines));

SearchBot 2. Apr 2007 22:06

Re: MAC von echter Netzwerkkarte finden?
 
Ja,
also erst mal danke für diesen Code. Da wär ich Leben ja nie drauf gekommen. Sieht alles sehr kryptisch aus. Ich werde es testen.

So wie ich den Code verstehe, legt es eine Liste der Netzwerkadapter an. Dadurch weiß ich aber immernochnicht, welche davon einen IRQ hat?!

Also bräuchte ich noch irgendwie eine Möglichkeit, wie im Geräte-Manager eine Liste der IRQs und der dazugehörenden Geräte herauszufinden und dann die beiden Listen miteinander zu vergleichen, um die Echte zu finden..., oder nicht?! *grübel*

ich.online 27. Apr 2007 13:17

Re: MAC von echter Netzwerkkarte finden?
 
Hallo,

welche Komponenten sind das?

Gruß

K.-D.

Zacherl 27. Apr 2007 13:19

Re: MAC von echter Netzwerkkarte finden?
 
Keine Komponenten .. es sind ActiveX bzw ComObj Methoden.

ich.online 27. Apr 2007 13:31

Re: MAC von echter Netzwerkkarte finden?
 
Hallo,

gibt es denn keine Möglichkeit mit vcl Komponenten die MAC Adressen zu ermitteln?

Ich habe code gefunden mit der unit NB30. Da wird aber immer nur die erste MAC angezeigt. Funktioniert auch unter Wine einwandfrei. Da ich das für einen Kopierschutz verwenden möchte, ist es schlecht, wenn ich dann die MAC von einer beweglichen Karte habe (Notebook). Bei meinem Notebook ist es so, dass die erste Karte Wireless ist.

Gruß

K.-D.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz