Page 1 sur 1

Condition si - alors  

Posté : mer. 28 déc. 2016 14:20
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

Re: Condition si - alors

Posté : mer. 28 déc. 2016 15:20
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

Re: Condition si - alors

Posté : jeu. 29 déc. 2016 11:03
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

Re: Condition si - alors

Posté : jeu. 29 déc. 2016 14:54
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

Re: Condition si - alors

Posté : jeu. 29 déc. 2016 15:12
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

Re: Condition si - alors

Posté : jeu. 29 déc. 2016 15:39
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:

Re: Condition si - alors

Posté : jeu. 29 déc. 2016 23:05
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