Page 1 sur 1

[R] Obtenir le statut d'un checkBox

Posté : ven. 06 déc. 2013 09:52
par tititoto
Bonjour,

J'aimerais savoir si un checkBox d'une application qui n'a pas était développer sous autoit est coché ou non.

J'ai utilisé la fonction suivante :

Code : Tout sélectionner

ControlCommand($class, "", $className, "IsChecked", "")
Mais hélas, celà me retourne toujours 0.

Une autre solution est envisageable :?:

Merci :wink:

>>>> Control <<<<
Class: TElCheckBox
Instance: 1
ClassnameNN: TElCheckBox1
Name:
Advanced (Class): [CLASS:TElCheckBox; INSTANCE:1]
ID: 134680
Text: CheckBox1
Position: 779, 443
Size: 15, 17
ControlClick Coords: 9, 7
Style: 0x54010000
ExStyle: 0x00000000
Handle: 0x00020E18

Re: [..] Obtenir le statut d'un checkBox

Posté : ven. 06 déc. 2013 16:54
par ZDS
Bonjour,

La syntaxe me parait bonne pourtant. Quel est le contenu des variables $class et $classname? pour rappel, $class doit correspondre à la fenêtre, pas à "TElCheckBox"; et $classname à "TElCheckBox1".

A bientôt.

PS: Remplace par un ControlClick pour voir le comportement. Si le clic se fait, ce n'est pas un souci d'identifiant.

Re: [..] Obtenir le statut d'un checkBox

Posté : lun. 09 déc. 2013 09:07
par tititoto
Bonjour,

$class correspond bien à la classe de la fenêtre et $classname à "TElCheckBox1".

Le controlClick fonctionne, la case se coche/décoche.

Mais impossible d'avoir l'état, peut être est-ce un composant non géré par autoit.

Re: [..] Obtenir le statut d'un checkBox

Posté : mar. 10 déc. 2013 00:17
par Tlem
Bonsoir. Ceci devrait fonctionner :

Code : Tout sélectionner

If ControlCommand($class, "", "[CLASS:TElCheckBox; INSTANCE:1]", "IsChecked", "") Then
    MsgBox(1, "Status", "Coché")
Else
    MsgBox(0, "Status", "Pas Coché")
EndIf
L'idéal serait soit de mettre le titre de la fenêtre, soit d'en récupérer le handle et de remplacer $class par cette information. ;)

Re: [..] Obtenir le statut d'un checkBox

Posté : mar. 10 déc. 2013 10:48
par tititoto
Bonjour,

Voici le détail de la fenêtre :

>>>> Window <<<<
Title: mon titre
Class: TFormMenuMain
Position: 1672, -8
Size: 1696, 1066
Style: 0x17CF0000
ExStyle: 0x00050100
Handle: 0x00010502

J'ai donc essayé ça :

Code : Tout sélectionner

WinActivate("mon titre")

If ControlCommand("[CLASS:TFormMenuMain]", "", "[CLASS:TElCheckBox; INSTANCE:1]", "IsChecked", "") Then
    MsgBox(1, "Status", "Coché")
Else
    MsgBox(0, "Status", "Pas Coché")
EndIf
 
Le résultat est toujours le même : Pas coché

Code : Tout sélectionner

WinActivate("mon titre")

If ControlCommand("mon titre", "", "[CLASS:TElCheckBox; INSTANCE:1]", "IsChecked", "") Then
    MsgBox(1, "Status", "Coché")
Else
    MsgBox(0, "Status", "Pas Coché")
EndIf
 
Le résultat est toujours le même : Pas coché

Et enfin, avec le handle :

Code : Tout sélectionner

WinActivate("mon titre")
$Handle = WinGetHandle("mon titre")

If ControlCommand($Handle, "", "[CLASS:TElCheckBox; INSTANCE:1]", "IsChecked", "") Then
    MsgBox(1, "Status", "Coché")
Else
    MsgBox(0, "Status", "Pas Coché")
EndIf
 
Le résultat est toujours le même : Pas coché :twisted:

Une solution peut être possible, détecter s'il y a du pixel noir dans le checkbox, pas très propre, mais si ça peut faire le boulot :roll:

Edit :

La solution avec la couleur du pixel :
► Afficher le texteSolution du pixel
Bon ça marche, mais c'est quand même surprenant que le ControlCommand lui ne fonctionne pas.

Si vous avez une solution plus propre je suis preneur, sinon je mettrai le topic résolu en fin de semaine, merci.

Re: [..] Obtenir le statut d'un checkBox

Posté : mar. 10 déc. 2013 10:56
par jguinch
A priori, le control TElCheckBox n'est pas reconnu comme un type checkbox.
C'est quoi ton logiciel ? On pourrait tester ?

Re: [..] Obtenir le statut d'un checkBox

Posté : mar. 10 déc. 2013 11:03
par tititoto
C'est un logiciel interne de mon entreprise. Donc non, il ne sera pas possible de le tester de votre côté

Re: [..] Obtenir le statut d'un checkBox

Posté : mar. 10 déc. 2013 21:09
par Tlem
Étrange votre histoire ...
Vous avez indiqué que le ControlClick() fonctionne, mais est-ce que ceci fonctionne aussi ?

Code : Tout sélectionner

$Handle = WinGetHandle("mon titre")
ControlCommand($Handle, "", "[CLASS:TElCheckBox; INSTANCE:1]", "Check", "")

Re: [..] Obtenir le statut d'un checkBox

Posté : mer. 11 déc. 2013 09:10
par tititoto
Tlem a écrit :Étrange votre histoire ...
Vous avez indiqué que le ControlClick() fonctionne, mais est-ce que ceci fonctionne aussi ?

Code : Tout sélectionner

$Handle = WinGetHandle("mon titre")
ControlCommand($Handle, "", "[CLASS:TElCheckBox; INSTANCE:1]", "Check", "")
Check : Coche ou décoche le checkBox (Ne devrait-il pas seulement le cocher ?)
UnCheck : Ne fait rien

Re: [..] Obtenir le statut d'un checkBox

Posté : mer. 11 déc. 2013 23:07
par Tlem
Si la commande "Check" vous coche bien le bouton, alors la commande IsChecked devrait vous renvoyer 1 s'il est coché.

Code : Tout sélectionner

$Handle = WinGetHandle("mon titre")
$Res = ControlCommand($Handle, "", "[CLASS:TElCheckBox; INSTANCE:1]", "IsChecked", "")
MsgBox(64, "Retour IsChecked", $Res)
Ce code est sensé fonctionner et vous afficher 1 si le bouton est coché. Si ce n'est pas le cas, c'est que les composants de l'interface de votre application ne sont pas standard et la solution de détecter la couleur est une autre alternative. ^^

Re: [R] Obtenir le statut d'un checkBox

Posté : jeu. 12 déc. 2013 09:17
par tititoto
Tlem a écrit :Si ce n'est pas le cas, c'est que les composants de l'interface de votre application ne sont pas standard
C'est surement ça, je passe le sujet en résolu, merci