Page 1 sur 1

forcer le click de souris

Publié : sam. 22/mai/2004 15:21
par Jenova
Salut tout le monde :wink: , j'avais il y a quelque temps de ça un prog(exe) qui réusissai à positionner la souris (jusque la pas de problème pour refaire la meme chose) à une coordonnée quelconque et qui cliquai automatiquement à cette position... mais la je seche... je n'arrete pas de farfouiller sur le net à la recherche d'une fonction qui permetterai de forcer ce fameux click de souris mais pas moyen.
Vous qui avez de l'experience dans le purebasic (et C++ je suppose) conaissez-vous un moyen de forcer ce fameux click (de façon logicielle bien sur... il ne s'agit pas d'ouvrire un popup avec ecrit "on tient ta femme et tes gosses en otage... ou tu clique ou on les butte" lol :D )

Publié : sam. 22/mai/2004 15:30
par fweil
Tu dois penser à mouse_event_() ?

Publié : sam. 22/mai/2004 15:47
par fweil
Voila, un source qui permet de comprendre.

Le programme permet de forcer le clic sur le bouton au milieu de la fenêtre même si on clique ailleurs !

Code : Tout sélectionner

#Window_Main = 0
#Gadget_Button = 0

#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(Event.l)
  Mem.l=GlobalAlloc_(0,8)
  GetCursorPos_(Mem)
  mouse_event_(Event | #MOUSEEVENTF_ABSOLUTE, PeekL(Mem) * ($FFFF / GetSystemMetrics_(0)), PeekL(Mem + 4) * ($FFFF / GetSystemMetrics_(1)), 0, GetMessageExtraInfo_())
  GlobalFree_(Mem)
EndProcedure

  WindowXSize = 640
  WindowYSize = 480
  Quit = #FALSE
  If OpenWindow(#Window_Main, 0, 0, WindowXSize, WindowYSize, #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "WebGadget")
      AddKeyboardShortcut(#Window_Main, #PB_Shortcut_Escape, #PB_Shortcut_Escape)
      If CreateGadgetList(WindowID())
          ButtonGadget(#Gadget_Button, WindowXSize / 2 - 30, WindowYSize / 2 - 10, 60, 20, "Beau bouton")
      EndIf
      ; Note: if you want to use a local file, change last parameter to "file://" + path + filename
      Repeat
        Select WindowEvent()
          Case #PB_Event_CloseWindow
            Quit = #TRUE
          Case #PB_Event_Menu
            Select EventMenuID()
              Case #PB_Shortcut_Escape
                Quit = #TRUE
            EndSelect
          Case #PB_Event_Gadget
            Select eventgadgetid()
              Case #Gadget_Button
                Debug "Bouton cliqué"
            EndSelect
          Case #WM_LBUTTONDOWN
          Case #WM_LBUTTONUP
            SetWindowText_(WindowID(), "Non pas ici")
            SetCursorPos_(GetSystemMetrics_(#SM_CXSCREEN) / 2, GetSystemMetrics_(#SM_CYSCREEN) / 2)
            MouseEvent(#MOUSEEVENTF_LEFTDOWN)
            Delay(100)
            MouseEvent(#MOUSEEVENTF_LEFTUP)
            SetWindowText_(WindowID(), "Non pas ici ... j'ai dit là")
        EndSelect
        Delay(1)
      Until Quit
  EndIf
  TerminateProcess_(GetCurrentProcess_(), 0)
End

Publié : sam. 22/mai/2004 16:11
par Jenova
Merci pour ton super code :D
Mais helas ce n'était pas vraiment ça dont je parlais.
Il était question (désolé j'ai du mal à m'expliquer) de forcer un click de souris meme si l'utilisateur ne clique nul part.
une sorte de fonction ou de commande qui, à chaque fois qu'elle est appelée, clique à l'endroit ou pointe la souris.
Comme je le disais plus haut, j'avais dans le temps un prog sous forme d'executable qui faisais ça, mais aujourd'hui je ne le retrouve plus et je ne me souvient meme plus de son nom :(
C'est pourquoi je recherche un moyen de le refaire, et en + ça me fait apprendre des truc :wink:
Donc si vous conaissez une telle commande ou un procédé qui permet de forcer le click de souris d'un utilisateur (à l'insu de son plein gré lol) je suis preneur :D

Publié : sam. 22/mai/2004 16:21
par Chris
Voila un petit bout de code:

Au bout de 3 secondes, le programme appuie lui_même sur le bouton quit, et le relache.

J'ai mis un delay() pour qu'on voie bien le truc

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
Chris :)

Publié : sam. 22/mai/2004 17:53
par Oliv

Publié : jeu. 27/mai/2004 22:47
par Jenova
Merci à tous :D

Publié : ven. 28/mai/2004 5:56
par cederavic
le meme avec le curseur qui se positionne sur le boutons

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 
        mouse.point
        mouse\x = 150 + WindowX()
        mouse\y = 182 + WindowY() + 23
        SetCursorPos_(mouse\x, mouse\y)
        SendMessage_(GadgetID(#Btn_Quit),#WM_LBUTTONDOWN,0,0) 
        Delay(800) 
        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