[R] 32 bits VS 64 bits

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
evilrux
Niveau 1
Niveau 1
Messages : 5
Enregistré le : lun. 04 avr. 2016 12:59
Status : Hors ligne

[R] 32 bits VS 64 bits

#1

Message par evilrux »

Bonjour,

J'ai réalisé un mini script me permettant de valider une fenêtre de fermeture d'un programme. Cette dernière apparait lorsque l'utilisateur veut fermer le programme et demande un mot de passe de validation.

Voici le code :

Code : Tout sélectionner

WinWaitActive("Nom de ma fenêtre")
WinActivate("Nom de ma fenêtre")
ControlSend("Nom de ma fenêtre", "", "Edit1", "mot de passe")
ControlClick("Nom de ma fenêtre", "", "Button1")
Cela fonctionne parfaitement sous Windows 7 32 bits mais pas du tout sous Windows 7 64 bits (et Windows 10 64 bits).
On dirait que le script trouve la fenêtre mais qu'il ne remplit pas le champ et ne valide pas le bouton.

J'ai lu qu'il y avait des particularités quand on manipule le registre en 64 bits mais je n'ai rien trouvé concernant les fenêtres.

Merci pour votre aide.
Modifié en dernier par evilrux le mer. 06 avr. 2016 08:30, modifié 1 fois.
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] 32 bits VS 64 bits

#2

Message par TomAijerrie »

J'ai lu qu'il y avait des particularités quand on manipule le registre en 64 bits mais je n'ai rien trouvé concernant les fenêtres.

... et le nom de différents dossiers tels que le dossier programme.
Je ne pense moi non plus qu'il y ait de problèmes sur les fonctions de gestion des fenêtres.

Vérifie quand même que le nom de la fenêtre n'a pas changer, sinon regarde si le problème viens de la détection de la fenêtre ou d'autre chose.

Ce n'est pas ça qui fais que ton code ne marche pas, mais je le résume

Code : Tout sélectionner

;On attend que la fenêtres soit active
;On l'active (ne sert à rien, on viens d'attendre qu'elle le soit)
Modifié en dernier par TomAijerrie le mar. 05 avr. 2016 10:52, modifié 2 fois.
evilrux
Niveau 1
Niveau 1
Messages : 5
Enregistré le : lun. 04 avr. 2016 12:59
Status : Hors ligne

Re: [..] 32 bits VS 64 bits

#3

Message par evilrux »

Bonjour TomAijerrie,

En effet pour "Program Files" et "Program Files (X86)"
Avatar du membre
TomAijerrie
Niveau 5
Niveau 5
Messages : 192
Enregistré le : lun. 02 juin 2014 09:55
Localisation : Lyon
Status : Hors ligne

Re: [..] 32 bits VS 64 bits

#4

Message par TomAijerrie »

Je viens de verifier dans la doc, la fonction controlsend fonctionne même si laa fenêtre n'est pas active, mais
The control might first need to be given focus with the ControlFocus() command, specially when referencing an controlID created by the script itself.
le problème ne viendrais absolument pas de l’architecture de ton OS, mais de "quel controle est activé" sur ta fenêtre.
evilrux
Niveau 1
Niveau 1
Messages : 5
Enregistré le : lun. 04 avr. 2016 12:59
Status : Hors ligne

Re: [..] 32 bits VS 64 bits

#5

Message par evilrux »

J'ai pu reproduire le problème sur une autre machine en 32 bits donc ce n'est visiblement pas un soucis d'architecture.
J'ai donc modifier le code suivant tes recommandations et ajouté un test pour voir quel contrôle a le focus.

Code : Tout sélectionner

WinWaitActive("Nom de la fenêtre")
ControlFocus("Nom de la fenêtre", "", "Edit1")
Local $sControl = ControlGetFocus("Nom de la fenêtre")
MsgBox(0, "test", "Qui a le focus : " & $sControl)
ControlSend("Nom de la fenêtre", "", "Edit1", "mot de passe")
ControlClick("Nom de la fenêtre", "", "Button1")
Sur le PC où le code fonctionne, j'ai bien le focus sur "Edit1" et le mot de passe se tape et le bouton est validé.
Sur d'autre machine, le retour du MsgBox est vide.
J'ai pourtant bien vérifié le nom de la fenêtre et des éléments via "AutoIt Window info".
Je pense donc que le soucis vient du programme que j'essaye de piloter et non du script.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [..] 32 bits VS 64 bits

#6

Message par jguinch »

Il faut savoir que certaines fonctions (notamment les fonctions ControlClick, ControlCommand...) peuvent ne pas fonctionner avec certaines applications dès lors que le script AutoIt est exécuté en 32 bits et que l'application est en 64 bits (et inversement).
L'idéal serait certainement de compiler deux exécutables (un 32 bits et un 64 bits) et de lancer celui qui convient (avec FileInstall + Run).
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
evilrux
Niveau 1
Niveau 1
Messages : 5
Enregistré le : lun. 04 avr. 2016 12:59
Status : Hors ligne

Re: [..] 32 bits VS 64 bits  

#7

Message par evilrux »

Je pense que je vais contourner mon problème autrement.
Merci pour votre aide
Répondre