Vous êtes sur la page 1sur 8

Saisie Automatise dArborescence Apoge

Document Version Initiale : 29 novembre 2012

S3A Bertrand Saoudi

Interfaage Apoge

Language utilis :
AutoIt est un langage cr initialement ( janvier 1999 ) pour automatiser les tches rptitives dans un environnement Microsoft Windows. Ce sont les fonctions de base qui sont utilises pour simuler une action au clavier ou de la souris et grer les interractions.

Send ( "keys" [, flag] ) Documentation


( simule une saisie clavier dans la fenetre active )

MouseClick ( "button" [, x, y [, clicks [, speed]]] ) Documentation


( simule un clic de souris )

PixelGetColor ( x , y [, hwnd] ) Documentation


( retourne la couleur du pixel positionn en X Y )

Communaut originale. http://www.autoitscript.com/forum/ On peut tout faire avec. http://www.autoitscript.com/forum/files/ Mon application de gestion de quotas d'impression http://bsaoudi.free.fr/PrintJobManager/

S3A Bertrand Saoudi

page 1/7

Action rptitive :
Quand vous crez un lment pdagogique, vous devez commencer par trouver un code lment disponible Pour une matre TC2 Dk, a donne 1DE24xxx avec le xxx chercher comme dans le jeu la TV avant le journal du soir.

Comment voit-on que le code est dj utilis ? Une fentre s'ouvre avec une croix sur un fond rouge pour nous prvenir visuellemnt. Comme il ne s'agit pas d'une fentre en tant qu'lment Windows - dtectable par AutoIt - , nous alons simplement dtecter un point rouge l'cran.

; la matire commence 4000 $numero = 4000 ; faire Do ; s'il y a un point rouge If PixelGetColor(368, 325) = 16711680 Then ; touche 'enter' pour fermer le message Send("{enter}") ; incrmentation du numro pour le prochain essai $numero += 1 EndIf ; on teste un code lment Send("1DE2" & $numero) ; on attend 2 secondes la rponse du serveur Sleep(2000) ; jusqu' ce qu'il n'y ait plus de pixel rouge Until PixelGetColor(368, 325) <> 16711680

S3A Bertrand Saoudi

page 2/7

Remplir un formulaire :
Quand il n'y a plus de message d'erreur, il n'y plus qu' remplir aux bons endroits.

_Send($type[$k]) ; MATI, UE ou SEM en fonction de l'index $k MouseClick("left", 338, 82, 1, $mouseSpeed); libell _Send($court) ; la variable contenant le libell court MouseClick("left", 181, 139, 1, $mouseSpeed); libell long _Send($long) ; la variable contenant le libell long If $credits <> '' Then MouseClick("left", 377, 222, 1, $mouseSpeed); crdits _Send($credits) ; les credits s'il y en a EndIf MouseClick("left", 567, 287, 1, $mouseSpeed); composante _Send(GUICtrlRead($CIP)) MouseClick("left", 567, 455, 1, $mouseSpeed); centre d'inscription pdagogique _Send(GUICtrlRead($CIP)) MouseClick("left", 572, 476, 1, $mouseSpeed); centre d'inscription pdagogique _Send(GUICtrlRead($CIPP)) MouseClick("left", 120, 56, 1, $mouseSpeed); enregistrer Sleep(500) ; sauvegarde du numro dans un fichier INI IniWrite(@ScriptDir & "\apogee.ini", $base & $code, $type[$k], $num[$k]) MouseClick("left", 442, 51, 1, $mouseSpeed); suivant

S3A Bertrand Saoudi

page 3/7

Aux bons endroits :


Pour cela, il faut avoir pralablement repr l'cran. Ce qui peut tre fait avec Autoit Window Info.

( le curseur n'a pas t enregistr, il devait tre au premier centre d'inscription pdagogique. 561,456 )

S3A Bertrand Saoudi

page 4/7

Plus simple :
Les fonctions maison actives par une combinaison de touches qui alimentent un fichier en langage AutoIt. ( automatisation, quand tu nous tiens )

HotKeySet("!c", "_PixelColor") HotKeySet("!m", "_MousePosition") Func _PixelColor() $pos = MouseGetPos() FileWrite("positions.au3", 'PixelGetColor(' & $pos[0] & ',' & $pos[1] & ') = ' & PixelGetColor($pos[0], $pos[1])) EndFunc ;==>_PixelColor Func _MousePosition() $pos = MouseGetPos() FileWrite("positions.au3", 'MouseClick("left",' & $pos[0] & ',' & $pos[1] & ',1,$mouseSpeed)') EndFunc ;==>_MousePosition

S3A Bertrand Saoudi

page 5/7

Action rptitive bis :


et sutout, quand vous avez trouv un numro libre, vous le notez, vous en aurez besoin pour faire les listes.

Il y a dj une base locale sqlite qui a servi stocker les renseignements du fichier maquette, il suffit d'y mettre le code qui vient d'tre accept par Apoge.
( le tout est dans une boucle )

_SQLite_Exec(-1,"UPDATE matieres SET code = '1DE2" & StringFormat("%04d", $numero) & "' WHERE rowid = '" & $aResult[$j][3] & "';")

$aResult[$j][3]

contient la rfrence vers l'lment que l'on est en train de

traiter.

S3A Bertrand Saoudi

page 6/7

Une fonction complte :


Pour remplir les listes, ce sont les rsultats d'une requte qui seront fournis une fonction d'interfaage de l'cran de saisie des listes.

Func _Liste() WinActivate("Apoge - " & $base) ; Dim $rqt[2] = ["SELECT code FROM ues;", "SELECT csem FROM sems;"] Dim $rqt2[2][2] If WinExists("Apoge - " & $base) Then _Panel("!ll",0) If PixelGetColor(118,84) = 16777215 Then Send("!{f4}") ; une fenetre en trop !! EndIf $rqt2[0][0] = "SELECT matieres.code, ues.court, ues.long FROM matieres, ues WHERE ues.num = matieres.ue AND ues.num = '" $rqt2[0][1] = "';" $rqt2[1][0] = "SELECT ues.code, semestres.court, semestres.long FROM ues, semestres, matieres WHERE ues.num = matieres.ue AND semestres.num = matieres.semestre AND semestres.num = '" $rqt2[1][1] = "' GROUP BY ues.code;" For $i = 1 To 2 ; les codes ue OU codes semestres _SQLite_Query(-1, "SELECT num FROM " & $tables[$i] & ";", $hQuery) ; pour chaque code While _SQLite_FetchData($hQuery, $aRow) = $SQLITE_OK ; Read Out the next Row ; les codes matieres OU code ue lister !! ConsoleWrite(@LF & $rqt2[$i - 1][0] & $aRow[0] & $rqt2[$i - 1][1]) If _SQLite_GetTable2d(-1, $rqt2[$i - 1][0] & $aRow[0] & $rqt2[$i - 1][1], $aResult, $iRows, $iColumns) = $SQLITE_OK Then If WinExists("Apoge - " & $base) Then _SaisieListe($code, $i - 1, $aResult, $iRows) For $j = 1 To $iRows _RQT("INSERT INTO listes ( code,top, element) VALUES ('" & $code & StringFormat("%04d", $num[$i - 1]) & "','" & $aResult[$j][1] & "','" & $aResult[$j][0] & "');") Next EndIf $num[$i - 1] += 1 WEnd Next If WinExists("Apoge - " & $base) Then _Close() WinActivate($s3a) _Dump(1) EndFunc ;==>_Liste

S3A Bertrand Saoudi

page 7/7

Vous aimerez peut-être aussi