[R] Problème lors de l'utilisation de @OSVersion

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jerebou
Niveau 3
Niveau 3
Messages : 41
Enregistré le : mer. 07 déc. 2011 13:11
Status : Hors ligne

[R] Problème lors de l'utilisation de @OSVersion

#1

Message par jerebou »

Bonjour a tous,


Mon problème concerne des tests de contrôle que j’établis sur @OSVersion.

Pour les besoins d'un script de renseignement système, je dois collecter un cookie en particulier (la partie collecte ne pose aucun souci, je passe tantôt par un FileFindFirstFile, tantôt par un copy sous cmd.

Voila mon bout de code:

Code : Tout sélectionner

$cookiexp = "C:\Documents and Settings\" & @UserName & "\Cookies"
$cookievistaup = @AppDataDir & "\Microsoft\Windows\Cookies"

If @OSVersion = "WIN_7" or "WIN_VISTA" Then
Local $cookiepath=$cookievistaup
ElseIf @OSVersion = "WIN_XP" or "WIN_XPe" Then
Local $cookiepath=$cookiexp
EndIf
Le problème, c'est que peu importe la valeur de @OSVersion, le chemin défini pour localiser les cookies revient toujours au dernier indiqué donc pour la seconde valeur de mon tests, ici $cookiexp.
Si j'inverse les 2 lignes, c'est $cookievistaup qui sera pris en compte, meme lors de tests sur une machine renvoyant "WIN_XP" pour @OSVersion (fichier de pseudo débogage a l'appui, qui indique donc la bonne valeur).

En fait j'ai l'impression que tant que le chemin indiqué par $cookiexp ou $cookievistaup est "correct" du point de vue syntaxe (même s'il n'existe pas), $cookiepath sera toujours défini par la dernière valeur "possible" et c'est comme si finalement mes If ne servaient a rien...

Quelqu'un a une idée ?
Modifié en dernier par jerebou le lun. 23 sept. 2013 09:36, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#2

Message par Tlem »

Bonjour.
Pour éviter les problèmes, la déclaration de variable doit ce faire avant les conditions.
Le test de condition multiple doit toujours tester la variable pour chaque condition.

Code : Tout sélectionner

Global $cookiepath
Global $cookiexp = @UserProfileDir & "\Cookies"
Global $cookievistaup = @AppDataDir & "\Microsoft\Windows\Cookies"

If @OSVersion = "WIN_7" or @OSVersion = "WIN_VISTA" Then
    $cookiepath = $cookievistaup
ElseIf @OSVersion = "WIN_XP" or @OSVersion = "WIN_XPe" Then
    $cookiepath = $cookiexp
Else
    MsgBox(16, "Erreur", "Un autre cas à traiter")
EndIf
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é".
jerebou
Niveau 3
Niveau 3
Messages : 41
Enregistré le : mer. 07 déc. 2011 13:11
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#3

Message par jerebou »

Merci Thierry,

mais toujours pareil :'(
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#4

Message par mikell »

Bizarre le code de Thierry marche bien chez moi
Sinon tu peux tenter ça

Code : Tout sélectionner

#Include <APIConstants.au3>

MsgBox(0, "", _WinAPI_ShellGetSpecialFolderPath($CSIDL_COOKIES))

; de l'include WinAPIEx.au3
Func _WinAPI_ShellGetSpecialFolderPath($CSIDL)
    Local $Ret = DllCall('shell32.dll', 'int', 'SHGetSpecialFolderPathW', 'hwnd', 0, 'wstr', '', 'int', $CSIDL, 'int', 0)
    If (@error) Or (Not $Ret[0]) Then
        Return SetError(1, 0, '')
    EndIf
    Return $Ret[2]
EndFunc   ;==>_WinAPI_ShellGetSpecialFolderPath
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#5

Message par Tlem »

Le code fonctionne parfaitement sur XP, Vista et 7.
Maintenant, après réflexion et pour une meilleure compatibilité ascendante, je préconise :

Code : Tout sélectionner

$cookiepath = RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Cookies")
MsgBox(0, "", $cookiepath)
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é".
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#6

Message par jguinch »

@jerebou : j'ai remarqué dans ton premier post une petite erreur dans le test d'OS.

Code : Tout sélectionner

If @OSVersion = "WIN_7" or [b][color=#FF0000]@OSVersion = [/color][/b]"WIN_VISTA" Then
Local $cookiepath=$cookievistaup
ElseIf @OSVersion = "WIN_XP" or [b][color=#FF0000]@OSVersion = [/color][/b]"WIN_XPe" Then
Local $cookiepath=$cookiexp
EndIf
 
Tlem n'a pas fait l'erreur dans son code : es-tu sûr d'avoir bien testé ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
jerebou
Niveau 3
Niveau 3
Messages : 41
Enregistré le : mer. 07 déc. 2011 13:11
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#7

Message par jerebou »

En fait j'ai semble-t-il mal recopié mon code pour le ElseIf, la macro n'est pas rappelée avant la seconde valeur donc en fait c'est If @OSVersion = valeur A ou valeur B donc mon erreur existe mais pas dans le code que je dois tester lol, plutôt dans mon post

et j'ai bien testé le code hier avant de dire que ça ne changeait rien au résultat, donc en ce qui me concerne ça mérite peut-être une confirmation sur mes premiers tests, je vous dirai ça dans 2 heures.

Sinon j'avais aussi pensé contourner le problème en passant par une etape intermediaire du genre

Si xp alors créer un fichier xp.txt, et seulement si ce fichier existe alors définir le chemin en fonction, sinon autre chemin, mais faut bien dire que c'est tordu et pas franchement joli... Ou encore utiliser un Case pour attribuer une valeur a un nouveau array selon @OSVersion, et selon ce array définir le chemin... Mais c'est pas beaucoup mieux surtout quand on voit la dernière proposition de Thierry, bien plus propre.
Modifié en dernier par jerebou le lun. 23 sept. 2013 08:30, modifié 1 fois.
jerebou
Niveau 3
Niveau 3
Messages : 41
Enregistré le : mer. 07 déc. 2011 13:11
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#8

Message par jerebou »

:D
jguinch tu as mis le doigt dessus

L'erreur venait bien du fait que la macro a tester n’était pas rappelée puisque le code fonctionne bien en l'ajoutant.
En y réfléchissant c'est normal que ça ne fonctionnait pas vu que quoi qu'il arrive If "valeur" se vérifie toujours...

Comme quoi j'avais bien fait de mal recopier mon code dans mon premier post :)
Merci a tous et Thierry je garde ton code, ça évite les tests inutiles mais je me pose la question pour les OS 64bits, ne faut-il pas rajouter 64 après HKCU ?

Je classe en [R] des réception de ta réponse.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#9

Message par jguinch »

Salut.
Pas besoin d'ajouter 64 après HKCU dans ce cas.
Plus de détails ici en ce qui concerne la redirection WOW64.
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
jerebou
Niveau 3
Niveau 3
Messages : 41
Enregistré le : mer. 07 déc. 2011 13:11
Status : Hors ligne

Re: [..] Problème lors de l'utilisation de @OSVersion

#10

Message par jerebou »

Merci donc pour ces précisions :)

Fermeture du topic.
Répondre