Page 1 sur 1

[R] Click sur bouton seulement quand il est non grisé

Posté : mar. 07 juil. 2009 10:30
par mickmicks
Bonjour le forum,

Je suis tombé sur un pti probleme lors de la creation de mon script. Je fais une sorte d'installation automatique. Et a un moment sur une fenetre ou un bouton est grisé et je dois cliqué dessus quand il est non grisé.

Quand je fait le click meme sur le bouton grisé, le script continue... et du coup mon action n'est pas terminé.

Image
Image

J'ai vu pas mal d'exemple sur le forum, mais souvent c'est dans le sens contraire, les personnes veulent grisé un bouton.

Si quelqu'un a une idée.

Merci d'avance

Re: [...] Click sur bouton seulement quand il est non grisé

Posté : mar. 07 juil. 2009 11:03
par jumby
Utilisez la fonction GUICtrlSetState.
GUICtrlSetState ( controlID, $GUI_ENABLE ) ; Activera le controle
GUICtrlSetState ( controlID, $GUI_DISABLE ) ; Désactivera le control (grisé)

Re: [...] Click sur bouton seulement quand il est non grisé

Posté : mar. 07 juil. 2009 11:25
par mickmicks
Merci pour ta reponse Jumby mais ça ne fait pas parti d'une GUI, se sont des boutons d'un logiciel...c'est ça qui me fait bloquer

Re: [...] Click sur bouton seulement quand il est non grisé

Posté : mar. 07 juil. 2009 19:50
par orax

Code : Tout sélectionner

#Include <WinAPI.au3>
#Include <Constants.au3>
_WinAPI_GetWindowLong($hWnd, $GWL_STYLE)
Quand un bouton est grisé, je pense qu'il prend le style style WS_DISABLED (0x08000000).
Je crois que j'avais écrit un exemple pour l'utiliser mais je n'arrive plus à le retrouver. Image

Re: [...] Click sur bouton seulement quand il est non grisé

Posté : mar. 07 juil. 2009 21:55
par ani

Re: [...] Click sur bouton seulement quand il est non grisé

Posté : mer. 08 juil. 2009 11:27
par mickmicks
Merci Ani et Orax, cette solution me semblait adapté mais je n'arrive pas a retrouver votre fonctionnement.

Quand je met des msgbox un peut partout pour consulter les valeurs des variables $style ou $bhandle. Le Bhandle, il n'y a pas de probleme mais le style est en Décimale et non en 0x50010000 (hexa?).
Comme dans le cas du lien de ani, mon bouton passe du style 0x58010000 à 0x50010000.
Donc il faudrait que je fasse attendre mon script tant que je n'ai pas ce changement de style.

Re: [...] Click sur bouton seulement quand il est non grisé

Posté : mer. 08 juil. 2009 19:11
par orax
En fait, c'est msgbox() qui renvoie la valeur en décimal mais je ne pense pas que ça ait de l'importance étant donné que : 0x08000000 = 134217728 = $WS_DISABLED.

Code : Tout sélectionner

; Dans l'include il y a "Global Const $WS_DISABLED = 0x08000000" (noté en hexa) mais MsgBox() renvoie la valeur en décimal :
MsgBox(0,"",$WS_DISABLED)

; Pour l'avoir en hexadécimal (il y a aussi StringFormat() qui permet de faire des conversions) :
MsgBox(0,"",Hex($WS_DISABLED))
Et pour la boucle il n'y a pas grand chose à changer.

Code : Tout sélectionner

$bhandle = ControlGetHandle("À propos de Bloc-notes", "", "Button1") ; "A propos" du Bloc-notes

; boucle jusqu'à ce que le bouton NE soit PAS désactivé
Do
    $style = _WinAPI_GetWindowLong($bhandle, $GWL_STYLE)
    Sleep(100)
Until Not BitAND($style, $WS_DISABLED)

Re: [R] Click sur bouton seulement quand il est non grisé

Posté : jeu. 09 juil. 2009 15:24
par mickmicks
Merci Orax, ça marche impec :)