Page 1 sur 1

Position du curseur

Publié : ven. 06/août/2004 23:34
par Aranoth
Petit tips pour avoir la position du curseur à l'écran, sans passer par ExamineMouse(), et donc sans devoir relacher la souris a chaque restauration etc...

Je débute avec les buffers, donc si on peut optimiser, n'hésitez pas à poster :P

Code : Tout sélectionner

    Structure mse
      x.l
      y.l
    EndStructure
    
    *Pos.mse=AllocateMemory(2000)
    
    GetCursorPos_(*Pos)
    
    Debug *Pos\x
    Debug *Pos\y
voila :wink:

Publié : sam. 07/août/2004 0:02
par Chris
J'ai sans doute pas compris l'astuce, mais pour obtenir le même résultat que ton code, pas besoin de créer une structure, puisqu'elle existe déjà.

C'est la structure POINT.

Et pas besoin de passer par un buffer non plus.
(Mais si tu fais un buffer, c'est sans doute que tu as une bonne raison :lol:)

Ca donne ça:

Code : Tout sélectionner

GetCursorPos_(Pos.POINT) 
    
Debug Pos\x 
Debug Pos\y
Ce code donne exactement le même résultat :)

Publié : sam. 07/août/2004 9:13
par Flype
oui et un petit exemple pour jouer avec :

Code : Tout sélectionner

n=500

Dim Pos.Point(n)

MessageRequester("CursorPos","Bougez la souris pdt quelques secondes")

For i=0 To n    
  GetCursorPos_(Pos(i)) 
  Delay(1)
Next

MessageRequester("CursorPos","Replay")

For i=0 To n    
  SetCursorPos_(Pos(i)\x,Pos(i)\y) 
  Delay(1)
Next

Publié : sam. 07/août/2004 12:20
par Backup
exellent !! :D

manque plus qu'a la faire cliquer !!!

[senario]

a un certain temps (ou a un temps certain)

la souris va toute seul sur le bouton demarer
elle clique au bon endroit pour arreter la machine !!

[/senario]

bonjour la blague !!! :lol:

Publié : sam. 07/août/2004 13:31
par Oliv
reagarde dans la partie débutant ici ou sur le musée et ton scénario se réalisera :wink: (enfin juste le clique)

Publié : sam. 07/août/2004 17:48
par Backup
tu veux dire le marier avec le code de Chris que voila ??

(section application ) !!

Code : Tout sélectionner

 ;/Constantes Window
Enumeration
    #Window_0
EndEnumeration

;/Constantes Gadget
Enumeration
    #Btn_Quit
EndEnumeration


If OpenWindow(#Window_0, 300, 300, 300, 200, #PB_Window_SystemMenu, "Fenêtre 1",0)
    If CreateGadgetList(WindowID(#Window_0))
        ButtonGadget(#Btn_Quit, 100, 170, 100, 25, "Quitter")
    EndIf
    
    SetTimer_(WindowID(),1,3000,0)
    Repeat
        Select WaitWindowEvent()
            Case #WM_TIMER
                SendMessage_(GadgetID(#Btn_Quit),#WM_LBUTTONDOWN,0,0)
                Delay(300)
                SendMessage_(GadgetID(#Btn_Quit),#WM_LBUTTONUP,0,0)
                
            Case #PB_EventGadget
                Select EventGadgetID()
                    ;Case
                    ;Case
                    Case #Btn_Quit : quit = 1
                EndSelect
                ;Case
                ;Case
            Case #PB_EventCloseWindow : quit = 1
        EndSelect
    Until quit = 1
    End
EndIf
:D

Publié : sam. 07/août/2004 18:12
par Oliv
nan, alors c'est peut-être sur le forum anglais que j'ai vu ça, dès que ma soeur me laisse le PC, je vais essayer de faire éteindre le PC comme ça

Publié : sam. 07/août/2004 19:50
par Backup
aaarg !! on va rire enfin !! :lol:

mem qu'apres on demandera a la souris d'ouvrir un programme
agrandir une fenetre , ect... en faire une lib serai cool
mais plus tard hein ?? :) :) :lol:

si quelqu'un trouve comment faire enfoncer les touches du clavier !!???
ou bien de faire avancer la souris (le boitier avec une boule (des fois) sur la table) la !! trop fort !!

ooouuuuaaaa la quatrieme dimension !!! :lol: :lol:

Publié : sam. 07/août/2004 19:57
par Oliv
Les touches du clavier ça a déjà été fait, pour les enfoncer il suffit d'appuyer dessus :wink: regarde dans code archiv on ne sait jamais. Sinon, je verrai demain. Faire bouger la souris sans y toucher c'est simple, met la en pente :lol: :lol:

Publié : sam. 07/août/2004 20:12
par Aranoth
Faire bouger la souris sans y toucher c'est simple
pas besoin de pente :lol:

Code : Tout sélectionner

SetCursorPos_(x,y)
Et merci a vous pour m'avoir eclaircis sur le code, y'avait pleins de trucs inutiles :oops: :wink:

Publié : sam. 07/août/2004 22:23
par Backup
pas besoin de pente Laughing
heu on parle de la souris la boite en plastoc posé sur la table !
pas du pointeur de souris !!! :)

Publié : dim. 08/août/2004 11:18
par Oliv
Certains esprits réfléchissent trop :P , bon je vais voir ça maintenant

Publié : dim. 08/août/2004 11:56
par Oliv

Code : Tout sélectionner

Structure Position
  Depart.Point
  Arrive.Point
EndStructure

Pos.Position

;Mögliche Konstanten für das Ereignis 
#MOUSEEVENTF_MOVE = $1 
#MOUSEEVENTF_ABSOLUTE = $8000 
#MOUSEEVENTF_LEFTDOWN = $2 
#MOUSEEVENTF_LEFTUP = $4 
#MOUSEEVENTF_MIDDLEDOWN = $20 
#MOUSEEVENTF_MIDDLEUP = $40 
#MOUSEEVENTF_RIGHTDOWN = $8 
#MOUSEEVENTF_RIGHTUP = $10 


Procedure MouseEvent(Ereignis.l) 
  Mem.l=GlobalAlloc_(0,8) 
  GetCursorPos_(Mem) 
  mouse_event_(Ereignis|#MOUSEEVENTF_ABSOLUTE,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_()) 
  GlobalFree_(Mem) 
EndProcedure 

SetCursorPos_(10,760) ; Place le curseur sur démarrer
;Simuliert einen Klick mit der Rechten Maustaste an der aktuellen Cursorposition 
MouseEvent(#MOUSEEVENTF_LEFTDOWN) 
MouseEvent(#MOUSEEVENTF_LEFTUP)

; Petite animation en translation
Pos\Depart\X = 10 : Pos\Depart\Y = 760
Pos\Arrive\X = 310 : Pos\Arrive\Y = 710
For i = Pos\Depart\X To Pos\Arrive\X Step 5
  If Pos\Depart\Y > Pos\Arrive\Y
    Pos\Depart\Y - 1
  EndIf
  SetCursorPos_(i,Pos\Depart\Y)
  Delay(20)
Next i


MouseEvent(#MOUSEEVENTF_LEFTDOWN) 
MouseEvent(#MOUSEEVENTF_LEFTUP)
Pos\Depart\X = 310 : Pos\Depart\Y = 710
Pos\Arrive\X = 650 : Pos\Arrive\Y = 372
For i = Pos\Depart\X To Pos\Arrive\X Step 5
  If Pos\Depart\Y > Pos\Arrive\Y
    Pos\Depart\Y - 5
    If Pos\Depart\Y < Pos\Arrive\Y : Pos\Depart\Y = Pos\Arrive\Y : EndIf
  EndIf
  SetCursorPos_(i,Pos\Depart\Y)
  Delay(20)
Next i
MouseEvent(#MOUSEEVENTF_LEFTDOWN) 
MouseEvent(#MOUSEEVENTF_LEFTUP)
Voilà le code tant attendu :D , il est préparé sur un écran 1024*768 avec un menu style XP, il n'éteind pas le PC mais clique sur le petit bouton "annuler" (je voulais pas tout le temps redémmarer :P ) . Le click du curseur a été pris sur un code dans codearchiv.
Pour positionner le curseur, j'ai utilisé ce petit code pour connaître les coordonnées de la souris:

Code : Tout sélectionner

lpPoint.point
Repeat
  GetCursorPos_(lpPoint)
  Debug "X = " + Str(lpPoint\X)
  Debug "Y = " + Str(lpPoint\Y)
  Debug ""
  Delay(50)
ForEver
Je vais faire un code un peu mieux cette après midi ou dans la semaine qui permettra de cliquer là où l'on veut que la souris ce déplace et clique

Publié : dim. 08/août/2004 12:55
par Backup
super !!

faudrai en faire une fonction style

mouse_move(coordx_depart,coory_depart,coordx_arrivé,coordy_arrivé,click)

click=on/off on=1 off=0

par exemple !
***********************************************************
*************************************************************
*************************************************************


ou alors

mouse_move(coordx,coordy)
qui pourrai etre mis dans une boucle d'animation


; pour deplacer le curseur ou l'on veut
for coordx=0 to arrive
for coordy=0 to arrivé
mouse_move(coordx,coordy)
next coordy
next coordx

mouse_click ; pour la faire cliquer !!!

et une bibrairie de plus !!!! :lol:

Publié : dim. 08/août/2004 14:06
par Oliv

Code : Tout sélectionner

; pour deplacer le curseur ou l'on veut 
for coordx=0 to arrive 
for coordy=0 to arrivé 
mouse_move(coordx,coordy) 
next coordy 
next coordx 
bah nan sinon c'est ce que j'aurais fait mais là tu va te déplacer en Y, puis en X, pas les 2 en même temps. :wink:
Par contre mouse_move(coordx_depart,coory_depart,coordx_arrivé,coordy_arrivé,click) , je comptais le faire.

EDIT : Voir mon nouveau poste et désolé Aranoth pour avoir dérivé sur ton sujet.