Condition si - alors

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Condition si - alors  

#1

Message par yohanb767 »

Bonjour à tous !

j'ai écris un petit script qui me sert d'automate pour une appli que j'utilise mais j'aurai aimé y apporter une petite chose en plus
actuellement je lance ce script avec la touche F1 mais le soucis c'est qu'il peux ce lancer sur n'importe quel fenêtres
j'aimerai qu'il ne fonctionne que Si fenêtre est active " Gestion des avis de réception: écran principal "
dans le cas contraire ne rien faire

voici le script
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <Constants.au3>

Opt("GUIOnEventMode", 1)
BlockInput(1)
;Symptômes client
MouseClick("left", 120, 488, 1, 1)
Send("AA01")
;Fact Nfac
Send("{TAB 10}")
Send("FACT")
;Destination
Send("{TAB 2}")
Send("RETOUR EXPEDITEUR")
;Direction
Send("{TAB 2}")
Send("REPARATION SIMPLE")
;Précision
MouseClick("left", 190, 579, 1, 1)
MouseClick("left", 211, 578, 1, 1)
;Devis
MouseClick("left", 84, 278, 1, 5)
MouseClick("left", 117, 278, 1, 5)
MouseClick("left", 225, 311, 2, 5)
BlockInput(0)

#Region #
$Form1 = GUICreate("Form1", 257, 147, 387, 245)
$idValider = GUICtrlCreateButton("Valider", 16, 96, 105, 25)
GUICtrlSetOnEvent($idValider, "Valider")
$idAnnuler = GUICtrlCreateButton("Annuler", 136, 96, 105, 25)
GUICtrlSetOnEvent($idAnnuler, "Annuler")
$Input1 = GUICtrlCreateLabel("Confirmer le symptôme", 67, 16, 121, 21)
$Input2 = GUICtrlCreateLabel("Panne", 56, 40, 145, 37)
GUICtrlSetFont(-1, 18, 800, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion #

Send("{RIGHT}")
Send("{LEFT}")
WinSetOnTop("Form1", "", 1)

While 1
   $nMsg = GUIGetMsg()
   Switch $nMsg
      Case $GUI_EVENT_CLOSE
         Exit

   EndSwitch
WEnd


Func Valider()
   MouseClick("left", 233, 52, 2, 0) ;Enregistrer
   Exit
EndFunc   ;==>Valider

Func Annuler()
   Exit
EndFunc   ;==>Annuler

Merci d'avance
Modifié en dernier par orax le mer. 28 déc. 2016 14:28, modifié 1 fois.
Raison : Ajout des balises pour le code.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Condition si - alors

#2

Message par walkson »

Bonjour,
Quand je vois votre code cela me fait des frissons !.....
Pour obtenir le handle d'une fenêtre, il y a Winwaitactive() et WinActive() (voir toute la famille des Win... winclose(), winexiste() etc...)

Pour envoyer des commandes sur un contrôle, il y a Controleclick() et toute la famille des controles (voir aide "controles")

Utiliser info tool dans le dossier autoit pour vous aider. Ça ne marche pas à tous les coups mais c'est mieux que des Send("{TAB 10}") et autres
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: Condition si - alors

#3

Message par yohanb767 »

le Problème c'est qu'avec les winactivate etc le script attend la bonne fenêtre pour démarrer , hors moi j'aimerai que quand je lance le script et vérifie que je suis bien dans la bonne fenêtre et qu'en cas contraire cela stop le script
ensuite je sais que le script présenté n'a pas une belle forme mais je suis débutant et essayerai d'y travailler
je m'en excuse d'avance pour les futures personnes qui me liront
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Condition si - alors

#4

Message par walkson »

Voilà un exemple de code qui réagit selon la fenêtre est ou non active (Msgbox fait perdre le focus)
Vous remarquerez que WinActivate("[CLASS:Notepad]", "") renvoie invariablement sur notepad quelque soit la fenêtre activée
$pid = Run("notepad.exe")

While 1
   If Not WinActive("[CLASS:Notepad]", "")  Then
      MsgBox(0,"","non actif",1)
      WinActivate("[CLASS:Notepad]", "") ;focus sur la fenêtre
   Else
      ControlSend("[CLASS:Notepad]", "", "Edit1", "Actif" & @TAB)
      MsgBox(0,"","actif",1)
   EndIf

Sleep(2000)
If Not ProcessExists($pid) Then Exit
WEnd
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
yohanb767
Niveau 5
Niveau 5
Messages : 117
Enregistré le : mer. 28 déc. 2016 14:09
Status : Hors ligne

Re: Condition si - alors

#5

Message par yohanb767 »

je ne parviens pas à faire ce que je souhaite , je vais continuer à chercher et m'informer , cela parait simple pour quelqu'un de confirmé mais pour un débutant c'est loin d'être évident
en tout cas merci pour ta patience et tes explications même si je n'est pas ma solution
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Condition si - alors

#6

Message par walkson »

Dernière tentative...
If ProcessExists("SCITE.exe") Then
   WinActivate("[Class:SciTEWindow]", "")
Else
   Exit
EndIf
Les choses les plus simples sont souvent les meilleures :mrgreen:
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Condition si - alors

#7

Message par orax »

walkson a écrit :Utiliser info tool dans le dossier autoit pour vous aider.
D'ailleurs, pour obtenir la CLASS de ta fenêtre, ce petit outil (ou un équivalent) sera nécessaire. Tu peux aussi l'ouvrir depuis SciTE4AutoIt : menu Tools > AU3Info (ou CTRL+F6).
Si tu ne trouves pas la classe de la fenêtre, tu pourrais aussi utiliser son titre, mais il ne faudrait pas qu'une autre fenêtre ait le même titre.
Voici un autre exemple, basé sur celui de walkson, qui utilise simplement le titre (au lieu de la classe) de la calculatrice de Windows (il faut l'exécuter avant de démarrer le script).
If ProcessExists("Calc.exe") Then
   WinActivate("Calculatrice")
    MsgBox(0,"","Fenêtre Calculatrice activée.")
Else
    MsgBox(0,"","La calculatrice n'est pas démarrée.")
   Exit
EndIf
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Répondre