Simuler un clic sur une fenêtre invisible

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Simuler un clic sur une fenêtre invisible

Message par Kayne »

La question est résumée dans le titre.
Il est possible de créer des fenêtres invisibles (#PB_Window_Invisible) , il est possible de simuler un clic de la souris (mouse_event_(#MOUSEEVENTF_LEFTDOWN,0,0,0,0) par exemple). Est-il possible de faire les 2 à la fois c'est à dire de faire cliquer l'utilisateur sur un bouton par exemple de ma fenêtre invisible ? Ou une autre solution serais de faire ça en dehors de l'écran visible de l'utilisateur. Mais s'il est possible d'ouvrir une fenêtre en dehors de l'ecran il n'est pas possible de faire aller la souris en dehors de l'ecran (en tout cas pas avec SetCursorPos_(sourisX ,sourisY) ). Est-ce que quelqu'un voit une solution ?
__________________________________________

Débutant les tutoriels de mon site sont la pour vous n'hésitez pas à aller les voir: http://tripamort.free.fr/
__________________________________________
Kayne - Webmaster de http://tripamort.free.fr/
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par Chris »

Essaye ça.

Code : Tout sélectionner

Enumeration
  #MyWinVisible
  #MyWinInvisible
EndEnumeration

Enumeration 
  #BoutonVisible
  #BoutonInvisible
EndEnumeration

Procedure CallBack(hWin, Msg, wParam, lParam)
  Result = #PB_ProcessPureBasicEvents
  
  Select Msg
    Case #WM_COMMAND
      If wParam & $FFFF = #BoutonInvisible And (wParam>>16) & $FFFF = #BN_CLICKED
        Debug "Vous m'avez cliqué?"
      EndIf
      
  EndSelect
  ProcedureReturn Result
EndProcedure

If OpenWindow(#MyWinVisible, 230, 160, 400, 400, "Fenetre visible", #PB_Window_SystemMenu)
  ButtonGadget(#BoutonVisible, 10, 10, 100, 20, "Cliquez moi")
EndIf

If OpenWindow(#MyWinInvisible, 0,0,0,0, "Fenetre invisible", #PB_Window_Invisible)
  ButtonGadget(#BoutonInvisible, 0, 0, 10, 10, "")
EndIf

SetWindowCallback(@CallBack())

Repeat
  Select WaitWindowEvent()
      
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BoutonVisible
          SetActiveWindow_(WindowID(#MyWinInvisible))
          SendMessage_(GadgetID(#BoutonInvisible), #BM_CLICK, 0, 0)
          SetActiveWindow(#MyWinVisible)
          
      EndSelect
    Case #PB_Event_CloseWindow
      Quit = #True
      
  EndSelect
Until Quit
End
Avatar de l’utilisateur
falsam
Messages : 7318
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par falsam »

Code : Tout sélectionner

Procedure HookActionCallBack(nCode, wParam, lParam)  
  Select wParam
      Case #WM_RBUTTONDOWN
        Debug "Bouton droit de la souris enfoncé."
        
      Case #WM_RBUTTONUP
        Debug "Bouton droit de la souris relaché."
        
      Case #WM_LBUTTONDOWN
        Debug "Bouton gauche de la souris enfoncé."
   
      Case #WM_LBUTTONUP
        Debug "Bouton gauche de la souris relaché."
        
      Case #WM_MBUTTONDOWN
        Debug "Bouton central de la souris enfoncé."
        
      Case #WM_MBUTTONUP
        Debug "Bouton central de la souris relaché."
        
    EndSelect
    
  ProcedureReturn CallNextHookEx_(HookHandle, nCode, wParam, lParam)
EndProcedure

;Exécution du Hook
HookMouseHandle = SetWindowsHookEx_(#WH_MOUSE_LL,@HookActionCallBack(), GetModuleHandle_(0),0)

OpenWindow(1, 10, 10, 10, 10, "", #PB_Window_Invisible)
StickyWindow(1, 1)

Repeat
 
Until WaitWindowEvent()=#PB_Event_CloseWindow

;On libére les Hooks à l'aide de la fonction UnHookWindowsHookEx
UnhookWindowsHookEx_(HookMouseHandle)
P.S. : Non compatible Linux ou Mac
Dernière modification par falsam le dim. 22/mai/2011 22:44, modifié 1 fois.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Ar-S
Messages : 9539
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par Ar-S »

falsam a écrit :Il y a quelques mois j'avais donné une solution afin de détecter la frappe au clavier en mode furtif depuis n'importe quelle applications windows ou depuis le bureau de window. j'ai amélioré ce code en ajoutant la détection des touche de la souris.

Code : Tout sélectionner

Structure KBDLLHOOKSTRUCT
  vkCode.i 
  scanCode.i 
  flags.i 
  Time.i 
  dwExtraInfo.i
EndStructure

;Procédure qui devra être appelée lorsque circulera un message de type "Clavier"
Procedure HookActionCallBack(nCode, wParam, lParam) 
  Protected *keyBoard.KBDLLHOOKSTRUCT=lParam
  Dim keyState.b (255)
  
  ;Souris
  Select wParam
      Case #WM_RBUTTONDOWN
        Debug "Bouton droit de la souris enfoncé."
        
      Case #WM_RBUTTONUP
        Debug "Bouton droit de la souris relaché."
        
      Case #WM_LBUTTONDOWN
        Debug "Bouton gauche de la souris enfoncé."
   
      Case #WM_LBUTTONUP
        Debug "Bouton gauche de la souris relaché."
        
      Case #WM_MBUTTONDOWN
        Debug "Bouton central de la souris enfoncé."
        
      Case #WM_MBUTTONUP
        Debug "Bouton central de la souris relaché."
        
    EndSelect
    
  ;Clavier
  If (nCode=#HC_ACTION) And (wParam = #WM_KEYDOWN)
    Ascii.w=0
    GetKeyboardState_(@KeyState(0))
    ;Le paramètre wparam renvoie le code virtuel de la touche
    ;pour le convertir en Ascii si c'est un caractère, on utilise cette fonction
    ToAscii_(wParam,(lParam>>16) & $FF ,@KeyState(0),@Ascii,0)
    
    Debug Str(*keyBoard\vkCode) + "  ("+Chr(*keyBoard\vkCode)+")"
  EndIf 
  ProcedureReturn CallNextHookEx_(HookHandle, nCode, wParam, lParam)
EndProcedure

;Exécution du Hook
HookMouseHandle = SetWindowsHookEx_(#WH_MOUSE_LL,@HookActionCallBack(), GetModuleHandle_(0),0)
HookKeyBoardHandle=SetWindowsHookEx_(#WH_KEYBOARD_LL, @HookActionCallBack(), 0, 0)

OpenWindow(1, 10, 10, 10, 10, "", #PB_Window_Invisible)
StickyWindow(1, 1)

Repeat
 
Until WaitWindowEvent()=#PB_Event_CloseWindow

;On libére les Hooks à l'aide de la fonction UnHookWindowsHookEx
UnhookWindowsHookEx_(HookMouseHandle)
UnhookWindowsHookEx_(HookKeyBoardHandle)
P.S. : Non compatible Linux ou Mac
Merci pour ce code,
par contre chez moi il capte bien les lettres mais pas les : ; / etc.. ça affiche les ¼ ¾ ¿ etc..
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Simuler un clic sur une fenêtre invisible

Message par nico »

@falsam,

Quel sont tes sources,, j'ai posté un code en 2009 expliquant comment faire un keylogger, il y a plusieurs bizarreries dans ton code,

GetKeyboardState_(@KeyState(0)) et ToAscii_(wParam,(lParam>>16) & $FF ,@KeyState(0),@Ascii,0) ne serve à rien puisque tu ne te sert pas de la valeur de retour qui est ascii mais de toute façon les paramètres passés ne sont pas bon.

@kaine,
je ne comprend pas ta demande, si tu fait une fenêtre invisible comment savoir si le clic correspond au bouton car justement celui-ci n'est pas visible.
Si tu pouvais expliquer le but de ta demande, la finalité, on serais surement en mesure de t'aider.

si tu veux qu'il se passe quelque chose quand l'utilisateur clique à un endroit précis, tu as juste besoin de getcursorpos_()
Avatar de l’utilisateur
falsam
Messages : 7318
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par falsam »

nico a écrit :@falsam,

Quel sont tes sources
Je m'étais basé à l'époque sur ce lien ainsi que sur le MSDN consacré aux différentes API. Ayant fait plusieurs essais j'ai oublié de faire du nettoyage.

La demande de Kaine ne portant que sur les évènements de la souris sur une fenêtre transparente je corrige mon code.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par Chris »

nico a écrit :si tu veux qu'il se passe quelque chose quand l'utilisateur clique à un endroit précis, tu as juste besoin de getcursorpos_()
Non, pas dans son cas.

GetCursorPos() renvoie des coordonnées écran.
Si pour une raison ou une autre, la fenêtre est déplacée, les coordonnées du clic ne sont plus valides.
C'est déjà vrai pour une fenêtre qu'on peut voir, alors pour une fenêtre invisible... :wink:
Avatar de l’utilisateur
falsam
Messages : 7318
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par falsam »

Quel idée de vouloir cliquer sur une fenêtre invisible !!! :p
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Re: Simuler un clic sur une fenêtre invisible

Message par nico »

Je suis désolé mais c'est pas un problème d'adapter les coordonnées écran à la fenêtre, je crois que la fenêtre invisible ne sert à rien dans son cas, il voulait juste trouvé un moyen de capturer un évènement à un endroit précis.

C'est pour cela qu'il aurait été plus judicieux pour lui d'expliquer le problème que de partir sur une idée.

T'es pas couché à cette heure ci, t'as pas de boulot demain :)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par Chris »

Je pourrais te retourner la question! :mrgreen:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par Chris »

falsam a écrit :Quel idée de vouloir cliquer sur une fenêtre invisible !!! :p
C'est à peu près ce que je me suis dit quand j'ai vu son post.
Faut avoir l'esprit un peu tordu pour aller faire cliquer un mec sur un bouton qu'on ne peut pas voir! :mrgreen:
Kayne
Messages : 157
Inscription : sam. 06/oct./2007 18:33
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par Kayne »

@chris C'est pas mal ton code je savais pas qu'on pouvais faire cliquer un bouton tout seul sans l'aide de la souris.

Mais ce que je cherche c'est pas seulement de cliquer sur un bouton dans une fenêtre invisible mais de pouvoir cliquer sur un point repéré par ses coordonnées qu'elles qu'elles soient (on reste dans la fenêtre quand même) et qu'en plus la fenêtre puisse "savoir" que le mec a cliquer et poursuivre les instructions. Comme si je voulais cliquer sur un point particulier d'une image que j'affiche sur une fenêtre invisible..

@falsam Je comprends pas bien ton code je suis très peu familier avec les hooks. Mais j'ai l'impression que je peut savoir quand le mec clique ou non mais je n'est pas l'impression que ce soit "pris en compte" par la fenêtre.

Je comprends qu'un exemple d'application pourrait éclairer un peu ma demande.
Imaginons que je réussisse à lancer le programme de quelqu'un dans une fenêtre que j'ai moi même créé et cette fenêtre est invisible. Je suis sur la page d'accueil du programme (un jeu par exemple)..
Ma demande est la suivante: Comment faire cliquer l'utilisateur à un endroit précis de cette fenêtre invisible et que le programme fasse comme si l'utilisateur avait vraiment cliqué sur cet endroit (si c'est un jeu je voudrais pouvoir cliquer sur le bouton "jouer" et que le jeu se lance effectivement).

Voila j'espere que c'est plus clair.
__________________________________________

Débutant les tutoriels de mon site sont la pour vous n'hésitez pas à aller les voir: http://tripamort.free.fr/
__________________________________________
Kayne - Webmaster de http://tripamort.free.fr/
Avatar de l’utilisateur
falsam
Messages : 7318
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par falsam »

Kayne a écrit :Ma demande est la suivante: Comment faire cliquer l'utilisateur à un endroit précis de cette fenêtre invisible.
Comment demander à un utilisateur de cliquer sur un endroit précis d'une fenetre ....... invisible !!
Demande lui pour connaitre sa réaction.
Kayne a écrit :..... et que le programme fasse comme si l'utilisateur avait vraiment cliqué sur cet endroit (si c'est un jeu je voudrais pouvoir cliquer sur le bouton "jouer" et que le jeu se lance effectivement).
Un programme fait ce qu'on lui demande de faire. Il ne fait pas semblant.
Kayne a écrit :Voila j'espere que c'est plus clair.
Pour moi non. Les autres je ne sais pas.
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Simuler un clic sur une fenêtre invisible

Message par Backup »

................
Dernière modification par Backup le sam. 01/oct./2011 9:53, modifié 1 fois.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Re: Simuler un clic sur une fenêtre invisible

Message par Chris »

Quand vous posez une question, ce serait bien d'essayer de vous expliquer clairement parce que je vous jure qu'il y a des moments, faut vraiment arriver à vous suivre. :|
Répondre