Page 1 sur 1

[R] Chercher valeurs dans clés

Posté : jeu. 15 juil. 2010 11:56
par JohnWayne
Bonjour à tous,

Dans l'outil que je suis entrain de faire, il est composé de TOOL.au3 et d'un fichier registre.au3 . J'ai donc inclue registre.au3 dans le script, sa permet d'être plus clair.

Voici donc ce que contient le fichier registre.au3 :

Code : Tout sélectionner

Global $RegisterKeys[4]
$RegisterKeys[1] = "HKEY_CLASSES_ROOT\.zix\"
$RegisterKeys[2] = "HKEY_CLASSES_ROOT\"
$RegisterKeys[3] = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\"
 
Voici ce que j'ai fait dans le fichier TOOL.au3 pour chercher ces éléments (en dessous ) dans les clés de registre que j'ai défini au dessus :

Code : Tout sélectionner

#include "registre.au3"

Global $Value[2] = ["TestautoIT", "Zone.ClientM.1"]
For $i in $Value
   RegRead($RegisterKeys & $i, "")
   if @error <> 1 And @error <> 2 Then
      FileWriteLine(@HomeDrive & "\report.txt", $i & " Trouvé! !" )
   Else
      FileWriteLine(@HomeDrive & "\report.txt", $i & " non trouvé !" )
   EndIf
Next
=> C'est là que le problème se pose. La clé TestautoIT se trouve bien dans HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ et la clé Zone.ClientM.1 se trouve bien dans HKEY_CLASSES_ROOT\ et le problème c'est que sur le rapport ce me met non trouvé !

-> Le fichier registre.au3 et bien placé dans le répertoire Include d'autoIT

-> J'ai essayé ceci :

Code : Tout sélectionner

Global $Value[2] = ["TestautoIT", "Zone.ClientM.1"]
For $i in $Value
   RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\" & $i, "")
   if @error <> 1 And @error <> 2 Then
      FileWriteLine(@HomeDrive & "\report.txt", $i & " Trouvé! !" )
   Else
      FileWriteLine(@HomeDrive & "\report.txt", $i & " non trouvé !" )
   EndIf
Next
Et là sa me trouve bien TestautoIT. Donc le problème viens du faite que je met $RegisterKeys mais pourquoi ?

Si quelqu'un a un éclair de génie ... je l'en remercie d'avance :D

JW

Re: [...] Chercher valeurs dans clés

Posté : jeu. 15 juil. 2010 12:40
par jbnh
Bonjour,

votre variable $RegisterKeys est une array ! Pour parcourir une array on ne fait pas $RegisterKeys & $i mais $RegisterKeys[$i] .

Re: [...] Chercher valeurs dans clés

Posté : jeu. 15 juil. 2010 19:08
par JohnWayne
Salut jbnh

Merci, j'ai rectifié ceci dans le code mais cela ne change pas le problème. Le prog ne trouve toujours pas la clé :(

Si tu à d'autres idées ...

@+

JW

Re: [...] Chercher valeurs dans clés

Posté : jeu. 15 juil. 2010 19:54
par Tlem
La ligne : For $i in $Value affecte à $i les valeurs contenue dans le tableau $Value.
Or vous avez besoin d'utiliser l'index de ces valeurs et non la valeur elle même.

De plus, vous faites plusieurs erreurs sur l'utilisation des tableaux et des boucles.

1 - Pour initialiser un tableau, on procède comme dans le code que je joint (Ligne 1 qui représente votre registre.au3).

2 - Pour lire un tableau, on utilise presque toujours l'index. Et pour éviter d'avoir un index fixe (car les clés peuvent changées en plus ou en moins), on utilise la commande Ubound, qui retourne la dimension du tableau.

3 - RegRead initialise @error si il y à un problème, donc il suffit de tester simplement si @error est initialisé pour savoir si la clé existe ou pas. ;)

IL NE FAUT JAMAIS OUBLIER QU'UN TABLEAU A TOUJOURS UN ELEMENT 0
Donc on ne compte jamais de 1 à X (sauf cas spécifique), mais de 0 à X.

Voici maintenant le code dont vous avez besoin pour scanner vos clés de base de registre :
► Afficher le texte

Re: [...] Chercher valeurs dans clés

Posté : jeu. 15 juil. 2010 22:45
par JohnWayne
Salut Thlem

Merci pour ces explications, tu explique très bien !

Je vais donc poursuivre mon outil et te remercie pour ton aide. Je vais essayer de refaire la fonction sans "modèle" pour voir si j'ai bien tout compris.

Merci encore, je passe le sujet en résolu.

JW

Re: [R] Chercher valeurs dans clés

Posté : ven. 16 juil. 2010 16:14
par corrs78
merci c'est ce que je cherchais.

Par contre pour moi, j'aurais besoin d'ajouter une "astérisque" (*)

clairement, je dois supprimer toutes les clés commençant par une chaine de caractère précise. c'est là que ça se complique :(

si vous pouviez éclairer ma lanterne...

Merci

Re: [R] Chercher valeurs dans clés

Posté : ven. 16 juil. 2010 17:15
par jbnh
Salut,

Donc tu parcours ton tableau et pour chaque clé, tu cherches ta chaine avec Stringleft (donne les premier char du string).

Re: [...] Chercher valeurs dans clés

Posté : lun. 23 août 2010 21:22
par JohnWayne
Enfaite, pour la retranscription sur le rapport des clés supprimés j'ai trouvait la solution mais en re-regardant le code que vous avez fait Tlem, j'ai voulu le ré-essayer et enfaite j'ai remarqué qu'ils ne trouvé que les valeurs présentes à la base des clés exemple :
La valeur AutoIT se trouve dans HKEY_CURRENT_USER\Software\ et dans HKEY_CLASSES_ROOT\ or il ne trouve la clé présente que dans Hkey_classes_root.

Savez vous pourquoi il y a cette "erreur" ?

Merci,

Cdlt

Re: [..] Chercher valeurs dans clés

Posté : lun. 23 août 2010 21:36
par Tlem
Vous utilisez quel code ?

Re: [..] Chercher valeurs dans clés

Posté : lun. 23 août 2010 21:46
par JohnWayne
Celui que vous avez fait

Re: [..] Chercher valeurs dans clés

Posté : lun. 23 août 2010 22:32
par Tlem
Oui, je vois. Je n'avais pas pris en compte une petite chose toute bête.
En fait vous voulez tester une clé et non une valeur de clé !

Donc si votre clé HKEY_CLASSES_ROOT\TestautoIT existe, mais que ca valeur par défaut n'est pas définie, alors RegRead renvoi une erreur. 8)

Dons si ce qui vous intéresse de prime abord est bien la clé et que peut importe les sous-clés ou valeurs de clés, alors il vous suffit de modifier dans le code que je vous ai donné la ligne

Code : Tout sélectionner

if @error Then
par

Code : Tout sélectionner

if @error > 0 Then

Re: [..] Chercher valeurs dans clés

Posté : lun. 23 août 2010 22:59
par JohnWayne
Bonsoir,

Merci Tlem, cela fait parfaitement son job !

@++