Page 1 sur 1

[R] 32 bits VS 64 bits

Posté : mar. 05 avr. 2016 09:06
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.

Re: [..] 32 bits VS 64 bits

Posté : mar. 05 avr. 2016 10:43
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)

Re: [..] 32 bits VS 64 bits

Posté : mar. 05 avr. 2016 10:49
par evilrux
Bonjour TomAijerrie,

En effet pour "Program Files" et "Program Files (X86)"

Re: [..] 32 bits VS 64 bits

Posté : mar. 05 avr. 2016 11:06
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.

Re: [..] 32 bits VS 64 bits

Posté : mar. 05 avr. 2016 14:59
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.

Re: [..] 32 bits VS 64 bits

Posté : mar. 05 avr. 2016 23:01
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).

Re: [..] 32 bits VS 64 bits  

Posté : mer. 06 avr. 2016 08:29
par evilrux
Je pense que je vais contourner mon problème autrement.
Merci pour votre aide