Netbios, l'addresse MAC ne se dévoile pas correctment [Résolu]

Messages postés
32
Date d'inscription
jeudi 8 mai 2003
Statut
Membre
Dernière intervention
3 octobre 2012
- - Dernière réponse : cs_Keneda
Messages postés
32
Date d'inscription
jeudi 8 mai 2003
Statut
Membre
Dernière intervention
3 octobre 2012
- 27 nov. 2006 à 11:43
Salut à tous, j'utilise l'api Netbios de netapi32.dll pour récupérer l'adresse MAC d'une carte réseau, on trouve ce code facilement sur google et il semble être le standard pour rechercher ce genre d'information.

Seul Hic qui n'est pas des moindres, lorsque l'on récupère l'adresse MAC avec le cable réseau branché, ça fonctionne bien, si on débranche le cable réseau, l'API renvoi 00-00-00-00-00
chose que je ne comprend pas ? Pour quelle raison on a cela ?

Pourquoi lorsque l'on débranche le cable et que l'on fait un simple Ipconfig /All on obtient bien l'adresse MAC et lorsque l'on utilise l'API celle-ci renvoi du vent ?
Microsoft ou quelqu'un d'autre aurait-il un moyen de renvoyer à tout les coups l'information correcte et de façon sûr ?

Merci à toute personne qui pourrait me renseigner sur ce point qui me pose un réel problème

Keneda, la fusée rouge
Afficher la suite 

1 réponse

Meilleure réponse
Messages postés
32
Date d'inscription
jeudi 8 mai 2003
Statut
Membre
Dernière intervention
3 octobre 2012
3
Merci
Et bien voilou, j'ai trouvé une méthode qui fonctionne parfaitement bien et qui renvoi
a chaque fois de manière sûr l'adresse MAC, même lorsque le cable réseau est débranché.

voici comment faire: (utilisation de WMI)

uses ComObj, OleServer;



function MACAdresse: string;
var
  WmiService : SWbemServices;
  WmiObjet   : SWbemObject;
  wmiObjetSet: SWbemObjectSet;
  ObjectEnumerator: IEnumVariant;
  ArrayVariant: OleVariant; 
  NumberItem  : LongWord;
  WMILocator  : TSWbemLocator;
begin
  Result:= '';
  WMILocator:= TSWbemLocator.Create(self);
  try
    try
     WMILocator.Security_.Set_ImpersonationLevel(wbemImpersonationLevelImpersonate);
     WMILocator.Security_.Set_AuthenticationLevel(wbemAuthenticationLevelDefault);
     WmiService:= WMILocator.ConnectServer('.', 'ROOT\CIMV2', '', '', '', '', 0, nil);
    except
      on E:EOleException do
       begin
         ShowMessage(SysErrorMessage(E.ErrorCode)+' ['+IntToHex(E.ErrorCode,8)+'] '+E.Message);
         Raise;
       end;
    end;
    wmiService.Security_.Privileges.Add(wbemPrivilegeShutdown, True);
    wmiObjetSet := wmiService.ExecQuery('Select * from Win32_NetworkAdapterConfiguration',
                                         'WQL', wbemFlagReturnImmediately, nil);
    ObjectEnumerator:= (WmiObjetSet._NewEnum) as IEnumVariant;
    while (ObjectEnumerator.Next(1, ArrayVariant, NumberItem) = S_OK) do
    begin
      WmiObjet := IUnknown(ArrayVariant) as SWBemObject;
      if Boolean(WmiObjet.Properties_.Item('IPEnabled', 0).Get_Value) then
        Result:= WmiObjet.Properties_.Item('MACAddress', 0).Get_Value;
    end;
  finally
    WMILocator.Free;
  end;
end;




voila, avec l'utilisation des WMI, plus de soucis, attention, il faut importer l'activeX
WbemScripting_TLB.pas

si vous avez besoin de précision sur ce code, n'hésitez pas à me contacter, je n'ai mis aucun commentaire et j'ai adapté un code source que j'avais fait pour faire des reboot à distance, d'ou le nom de certaines variables ;-)

Keneda, la fusée rouge

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 201 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Keneda