[R] Obtenir le statut d'un checkBox

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
tititoto
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 16 sept. 2013 16:19
Status : Hors ligne

[R] Obtenir le statut d'un checkBox

#1

Message 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
Modifié en dernier par tititoto le jeu. 12 déc. 2013 09:49, modifié 1 fois.
Avatar du membre
ZDS
Membre émérite
Membre émérite
Messages : 554
Enregistré le : jeu. 10 juin 2010 10:35
Localisation : 22300 Cul-d'chouette Langue-de-vache
Status : Hors ligne

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

#2

Message 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.
ZDS : Chef de projet du nAiO (logiciel AutoIt gratuit sous licence CC 4.0 BY-NC-SA)
Tout problème a une solution, donc si il y a pas d'solution, c'est qu'il y a pas d'problème !
tititoto
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 16 sept. 2013 16:19
Status : Hors ligne

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

#3

Message 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.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#4

Message 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. ;)
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é".
tititoto
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 16 sept. 2013 16:19
Status : Hors ligne

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

#5

Message 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.
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2515
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

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

#6

Message par jguinch »

A priori, le control TElCheckBox n'est pas reconnu comme un type checkbox.
C'est quoi ton logiciel ? On pourrait tester ?
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
tititoto
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 16 sept. 2013 16:19
Status : Hors ligne

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

#7

Message par tititoto »

C'est un logiciel interne de mon entreprise. Donc non, il ne sera pas possible de le tester de votre côté
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#8

Message 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", "")
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é".
tititoto
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 16 sept. 2013 16:19
Status : Hors ligne

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

#9

Message 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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11824
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

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

#10

Message 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. ^^
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é".
tititoto
Niveau 1
Niveau 1
Messages : 10
Enregistré le : lun. 16 sept. 2013 16:19
Status : Hors ligne

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

#11

Message 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
Répondre