Lister les périphériques [Résolu]

Signaler
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
-
ni69
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
-
Bonjour tout le monde,



Connaissez-vous un moyen de lister tous les périphériques installés sur un ordinateur (en utilisant l'API SetupDiGetClassDevsEx
ou autrement)



Merci,
@+

Nico { http://www.ni69.new.fr/ }

9 réponses

Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
26
J'ai constaté, comme vous, que cette clé n'existait plus sous Windows XP.

Cependant, on trouve sous HKLM\SYSTEM\Controlset001\enum l'ensemble des
périphériques installés. Puis, en fouillant dans les sous-arbres, on
trouve des entrées nommées DeviceDesc (Device Description) qui
devraient t'intéresser.

En modifiant légèrement le code ci-dessus, tu devrais rapidement trouver la solution.

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
26
Le code qui suit n'est pas de moi et je ne l'ai pas vérifié. Il provient de feu delphijournal.infoliens.com :



Liste du matériel installé
uses Registry



procedure TForm1.Button1Click(Sender: TObject);

procedure GetHardwareList(DisplayStrings : TStrings);

var

RegHKDD, RegHKLM: TRegistry;

SLKeys, SLHWL: TStringList;

i: Integer;

RegDataInfo : TRegDataInfo;

begin

try

RegHKDD := TRegistry.Create;

RegHKDD.RootKey := HKEY_DYN_DATA;

RegHKLM := TRegistry.Create;

RegHKLM.RootKey := HKEY_LOCAL_MACHINE;

SLKeys := TStringList.Create;

SLHWL := TStringList.Create;

SLHWL.Sorted := true;

if RegHKDD.OpenKey('Config ManagerEnum', false) then begin

RegHKDD.GetKeyNames(SLKeys);

for i := 0 to SLKeys.Count - 1 do

if RegHKDD.OpenKey('Config ManagerEnum' + SLKeys[i], false)then

if RegHKLM.OpenKey(' Enum ' + RegHKDD.ReadString('HardWareKey'), false) then

if RegHKLM.GetDataInfo('Class', RegDataInfo) then

SLHWL.Add(RegHKLM.ReadString('Class') + ': '
+ RegHKLM.ReadString('DeviceDesc'));

end; {if RegHKDD.OpenKey('Config ManagerEnum', false)}

finally

SLKeys.Free;

RegHKLM.Free;

RegHKDD.Free;

end;

DisplayStrings.Assign(SLHWL);

SLHWL.Free;

end;

begin

GetHardwareList(Memo1.Lines);

end;


Autres codes, voir dans le cache de google
Enfin, il faudra vérifier qu'il fonctionne sur toutes les pateformes.
<hr color ="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
11
Date d'inscription
lundi 7 février 2005
Statut
Membre
Dernière intervention
2 décembre 2005

Salut delphiprog, j'ai essayé le code de feu delphijournal.infoliens.com mais ça donne aucun resultat c'est à dire rien ne s'affiche dans le mémo.Je travail sous win xp, et j'ai remarqué qu'il n'ya pas clé Config ManagerEnum dans ma base de régistre. merci d'apporter les modifications qui s'impose au code. De mon côté je continue le recherches pour le parfaire. Merci
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Salut DelphiProg,

Merci de t'être occupé de mon problème. Malheureusement, comme le dit
kasjacques, le memo ne contient rien en fin d'exécution du code.

Une chose m'interpelle quand même : Existe-t-il vraiment une clé root nommée HKEY_DYN_DATA dans le registre

Je n'en n'avais pas connaissance... (elle n'existe pas dans l'éditeur regedit)


Je poursuis mes recherches...

Merci à vous deux

@+

Nico { http://www.ni69.new.fr/ }
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Merci beaucoup DelphiProg pour cette précieuse information !!!!!

Je vais tout de suite me pencher sur ces clés du registre.

Petite question toutefois : ne faut-il mieux pas choisir la clé CurrentControlSet plutôt que ControlSet001

@+

Nico { http://www.ni69.new.fr/ }
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Je me heurte à une erreur bizarre....

Delphi ne veut pas ouvrir la clé !



OpenKey('SYSTEM\CurrentControlSet\Enum',False) renvoie false

alors que KeyExists('SYSTEM\CurrentControlSet\Enum') renvoie true !!!!



J'ai aussi essayé avec la clé ControlSet001, ça ne marche pas non plus...


@+

Nico { http://www.ni69.new.fr/ }
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Ha, j'ai compris, c'est une histoire d'autorisation d'accès...



C'est quand un peu embêtant de devoir aller dans la base de registre
pour autoriser manuellement le contrôle total aux utilisateurs avant de
pouvoir utiliser le code... Avez-vous une solution pour modifier les
autorisations de lecture d'une clé du registre automatiquement

@+

Nico { http://www.ni69.new.fr/ }
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
26
Pour cela, jette un oeil sur le code modifier les droits d'un compte.

<hr color="#008000">Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
1418
Date d'inscription
samedi 12 juin 2004
Statut
Membre
Dernière intervention
5 juillet 2010
9
Ok merci DelphiProg, je vais voir de ce côté là



@+

Nico { http://www.ni69.new.fr/ }