[R] Gérer les aray avec une fonction

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Trash
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 27 janv. 2009 20:51
Status : Hors ligne

[R] Gérer les aray avec une fonction

#1

Message 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...
Modifié en dernier par Trash le ven. 01 mai 2009 22:42, modifié 1 fois.
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#2

Message 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.
Trash
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 27 janv. 2009 20:51
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#3

Message 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 :

Code : Tout sélectionner

$MousePos[0] = 10 et $MousePos[1] = 0
Je veux l'enregistrer en tant que variable..
Exemple :

Code : Tout sélectionner

$ARRAY[0] = $MousePos[0] & "," & $MousePos[1]
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
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#4

Message 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... :mrgreen:
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é".
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#5

Message 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.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#6

Message par Iste »

Si j'ai bien compris le probleme, dans Scite4Autoit, il y a un "recorder" (alt-F6)
Signez ici
Trash
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 27 janv. 2009 20:51
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#7

Message 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
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#8

Message 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).
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#9

Message 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 :P )

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
 
Signez ici
Trash
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 27 janv. 2009 20:51
Status : Hors ligne

Re: [..] Gérer les aray avec une fonction

#10

Message par Trash »

Iste, tu es parfait :D

Merci beaucoup, ça marche nikel :P
Répondre