[R] Chercher valeurs dans clés

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
JohnWayne
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mer. 24 mars 2010 17:48
Status : Hors ligne

[R] Chercher valeurs dans clés

#1

Message 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
Modifié en dernier par JohnWayne le lun. 23 août 2010 22:59, modifié 3 fois.
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

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

#2

Message par jbnh »

Bonjour,

votre variable $RegisterKeys est une array ! Pour parcourir une array on ne fait pas $RegisterKeys & $i mais $RegisterKeys[$i] .
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
JohnWayne
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mer. 24 mars 2010 17:48
Status : Hors ligne

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

#3

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#4

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JohnWayne
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mer. 24 mars 2010 17:48
Status : Hors ligne

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

#5

Message 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
Avatar du membre
corrs78
Niveau 5
Niveau 5
Messages : 160
Enregistré le : lun. 13 août 2007 17:38
Localisation : Yvelines
Status : Hors ligne

Re: [R] Chercher valeurs dans clés

#6

Message 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
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [R] Chercher valeurs dans clés

#7

Message par jbnh »

Salut,

Donc tu parcours ton tableau et pour chaque clé, tu cherches ta chaine avec Stringleft (donne les premier char du string).
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
JohnWayne
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mer. 24 mars 2010 17:48
Status : Hors ligne

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

#8

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#9

Message par Tlem »

Vous utilisez quel code ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JohnWayne
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mer. 24 mars 2010 17:48
Status : Hors ligne

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

#10

Message par JohnWayne »

Celui que vous avez fait
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#11

Message 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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
JohnWayne
Niveau 4
Niveau 4
Messages : 68
Enregistré le : mer. 24 mars 2010 17:48
Status : Hors ligne

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

#12

Message par JohnWayne »

Bonsoir,

Merci Tlem, cela fait parfaitement son job !

@++
Répondre