Page 1 sur 1
[R] Gérer les aray avec une fonction
Posté : mer. 29 avr. 2009 14:21
par Trash
Bonjour..
Je voudrais créer un programme pour lancer des programmes automatiquement.
Lors de l'appuye de F4, j'enclenche une fonction qui fait MouseGetPos..( Qui prend la position de la souris.. )
Ce que je n'arrive pas a faire , c'est le nombre de variables inconnu..
Ex : Global $MousePgr[10]
Mais je voudrais connaître et lister toutes les positions de cet array..
Puis, si il n'y a rien, les appliquer dans l'array...
Re: [..] Gérer les aray avec une fonction
Posté : mer. 29 avr. 2009 15:22
par GaRydelaMer
Bonjour
pas très clair ta demande.
HotKeySet(), pour exécuter une fonction lors de l'appuie sur une touche.
Le tableau que te retourne la fonction MouseGetPos() te retourne un tableau avec 2 éléments un pour le x, l'autre pour le y.
Comme WinGetPos() te retourne un tableau à 4 éléments x,y largeur, hauteur d'une fenêtre.
Sinon fais une tour dans la doc et particulièrement l'UDF Array.au3 pour des fonctions et l'utilisation des tableaux.
Re: [..] Gérer les aray avec une fonction
Posté : jeu. 30 avr. 2009 09:52
par Trash
Exemple , on appuye sur F4 ( Oui..Je sais qu'il faut utiliser HotKeyset.. )
En appuyant sur cette touche.. ( regardons le schéma )
Code : Tout sélectionner
Func MousePgr()
Sleep(500)
$MousePos = MouseGetPos()
; Qui revient a faire $MousePos[0] et $MousePos[1] Comme il y a deux variables..
EndFunc
Ce que je veux faire..C'est de ne pas connaître le nombre de variables..Sinon, tout est remplacé a chaque fois..
Je fait donc un Array..
Global $ARRAY[10] ; Il retient ici 10 positions de souris au maximum...
Imaginons que j'applique la fonction MousePgr()..
Ma souris a été enregistrer a :
Je veux l'enregistrer en tant que variable..
Exemple :
Ce qui me donnera 10,0 ( Comme pour déplacer la souris.. ) Dans l'$array 0 !
Mais imaginons que l'action se répète..
Il va alors tout le temps se remplacer dans l'array 0..
Je veux que l'array se remplisse automatiquement..Qui sera donc pas obligé de regarder si il est vide ou utilisé..
J'ai pensé a :
Code : Tout sélectionner
For $i = 0 to 10 step 1 ; 10 = Array max.
If $ARRAY[$i] = "" Then
ExitLoop
Else
; LES ARRAY SONT PLEIN..ON NE PEUX PAS LES REPLIR !
EndIf
Next
J'èspère que vous aurez compris
Re: [..] Gérer les aray avec une fonction
Posté : jeu. 30 avr. 2009 10:04
par Tlem
Il existe tout simplement une fonction
_ArrayAdd qui permet de s'affranchir de l'obligation de connaitre la taille du tableau au départ.
Après, selon votre besoin, il vous suffit de contrôler la taille du tableau avec
Ubound($Array) et lorsque le tableau dépasse une certaine taille, vous le ré-initialisez ou vous faites une autre action...

Re: [..] Gérer les aray avec une fonction
Posté : jeu. 30 avr. 2009 13:33
par GaRydelaMer
Bonjour,
ok j'ai compris fais comme ca, tu déclares ton tableau avec 11 éléments en global. (0 à 10) et on va utiliser l'élément 0 pour sauvegarder l'incrément de l'historique (un compteur).
Code : Tout sélectionner
Global $nbHisto = 10
Global $savePos[$nbHisto + 1]
$savePos[0] = 0
HotKeySet("{F4}", "SaveHistoriquePos") ; F4 incrémente le tableau
HotKeySet("{F5}", "RestaurehistoriquePos") ; affiche ds la console la position sauvegarder
HotKeySet("!x", "Quitter") ; quitte le programme test
Func SaveHistoriquePos()
Local $histo = $savePos[0]
If $histo > $nbHisto -1 Then $histo = 0
$savePos[0] = $histo + 1
Local $pos = MouseGetPos()
$savePos[$savePos[0]] = $pos[0] & "|" & $pos[1]
EndFunc ;==>SaveHistoriquePos
Func RestaurehistoriquePos()
ConsoleWrite("Derniere sauvegarde=" & $savePos[0] & " pos=" & $savePos[$savePos[0]] & @LF)
EndFunc ;==>RestaurehistoriquePos
Func Quitter()
Exit
EndFunc ;==>Quitter
While 1
Sleep(10)
WEnd
Comme ca ton tableau est mis à jour à chaque fois que tu appuis sur ta touche, et tu sais qu'elle est la dernière position enregistrer.
Re: [..] Gérer les aray avec une fonction
Posté : jeu. 30 avr. 2009 16:08
par Iste
Si j'ai bien compris le probleme, dans Scite4Autoit, il y a un "recorder" (alt-F6)
Re: [..] Gérer les aray avec une fonction
Posté : jeu. 30 avr. 2009 17:24
par Trash
La fonction _ArrayAdd me plaît.
Celle de GaRydelaMer aussi mais celle de GaRydelaMer ne retient pas toute les positions..
Iste lui a rien compris ..
Tlem est donc celui qui me faut..Mais avec _ArrayAdd je voudrais lister toutes les positions..
Exemple
_ArrayAdd(MouseGetPos()) [ C'est un schéma !! ]
Avce x fonction je voudrais lister $Array.
Code : Tout sélectionner
For $i = 0 to 10 step 1
MouseMove($Array[$i],$Array[$i][$i])
If $Array[$i] AND $Array Then ExitLoop
Sleep(2000)
Next
Re: [..] Gérer les aray avec une fonction
Posté : jeu. 30 avr. 2009 17:51
par GaRydelaMer
Je pense pourtant avoir répondu à ta question, le tableau retient 10 positions.
Si tu en veux plus tu change la valeur: Global $nbHisto = 10
Ensuite pour les connaitre toutes:
Code : Tout sélectionner
For $i = 1 To Ubound($savePos) - 1
ConsoleWrite("sauvegarde=" & $savePos[$i] & " pos=" & $savePos[$i] & @LF)
Next
Sinon regarde la doc de _ArrayAdd(), _ArrayDisplay() et Redim.
Dans la valeur du tableau tu as x|y, pour trouver x et y, $pos = StringSplit($savePos[$i], "|"), x = $pos[0], y = $Pos[1] et cela pour chaque élément du tableau d'indice $i (dans la boucle For).
Re: [..] Gérer les aray avec une fonction
Posté : jeu. 30 avr. 2009 17:59
par Iste
J'ai tres bien compris le probleme, je dis juste que c'est peut etre pas la bonne facon de le résoudre (comme j'en sais pas plus, je ne peut que proposer..., apres pour avoir uniquement des propositions qui vous sont utiles, a vous d'etre le plus claire possible !)
Moi par "lister", j'entend faire une liste, donc j' aurais dis _ArrayDisplay, mais au vu du script et de ma propre logique, je dirais que vous essayez de faire un MouseMove() sur chaqu'une des positions.
Du coup c'est pas tres malin de mettre les deux coordonées dans une seul variable, mais bon, ca marche aussi ! (pis c'est plus facile

)
Sinon :
Code : Tout sélectionner
#Include <Array.au3>
HotKeySet("{F4}", "Ecriture")
HotKeySet("{F5}", "Lecture")
HotKeySet("!x", "Quitter") ; quitte le programme test
Global $Array[1]
While 1
Sleep(100)
WEnd
Func Ecriture()
$pos = MouseGetPos()
_ArrayAdd ($Array,$pos[0]&","&$pos[1])
$Array[0] = $Array[0] + 1
EndFunc
Func Lecture()
If Not $Array[0] > 0 Then Return 0
For $i = 1 to $Array[0]
$pos = StringSplit($Array[$i],",")
MouseMove($pos[1],$pos[2])
Sleep(1000)
Next
EndFunc
Func Quitter()
Exit
EndFunc ;==>Quitter
Re: [..] Gérer les aray avec une fonction
Posté : ven. 01 mai 2009 22:13
par Trash
Iste, tu es parfait
Merci beaucoup, ça marche nikel
