poshu a écrit :Je rejoins Dobro pour dire que c'est vraiment des fonctions tendancieuses... Et si c'est pas le cas, plutot que de nous le dire, pourquoi ne pas donner des exemples d'application pas trop louche?
keyb_event() : j'utilise cette fonction pour modifier les données et le VBA d'un classeur Excel. J'ai posté à ce sujet il y a quelques temps et c'est la réponse qu'on m'a proposée. Ca permet de ne pas utiliser de fonctions trop compliquées.
Certes elle peut être "détournée" à des fins malveillantes mais c'est également le cas avec la fonction FindString() ! N'importe quelle fonction peut être détournée, en réagissant comme ca autand arrêter la programmation et se mettre au tricot...
Je vous indique ce qui a commencé a devenir une idée obsedante : http://www.arcadecabin.com/play/kitten_cannon.html
J'ai joué tres longtemps a ce jeu et je me disais que simuler un utilisateur serait genial. Je voulais pondre un code qui joue a ce jeu et analyse le plus grand score (le meilleur score est indiqué en vert et pas en rouge). Ainsi, au bout de 24h de jeu, j'etais curieux de connaitre le resultat.
Voila pkoi une emulation d'evenements physiques me plait beaucoup !!!
Et je souhaite qu'il soit integré officiellement dans PB
vk=32 ; chr(32)=ESPACE
Repeat ; emule l'appuie de la touche ESPACE toutes les 1 seconde
Delay(1000)
keybd_event_(vk,0,0,0)
keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key.
ForEver
Résultat, beaucoup de choses réagissent mais pas le jeu flash justement !!
Je ne desespere pas et vais coder une emulation de clic de souris au bon endroit....
Et voila un code manipulant la souris. Ca pointe le mot CONTINUER du jeu flash et ca clique !
Et la, la souris est parfaitement emulé (contrairement aux touches pour un truc en flash) :
Procedure MouseEvent(Ereignis.l)
Mem.l=GlobalAlloc_(0,8)
GetCursorPos_(Mem)
mouse_event_(Ereignis | $8000,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_())
GlobalFree_(Mem)
EndProcedure
Repeat
Delay(3000)
SetCursorPos_(660,640) ; mes coordonnées qui pointe ma souris sur le mot CONTINUER du jeu flash
MouseEvent($2) : MouseEvent($4) ; clic de souris
keybd_event_(vk,0,0,0)
keybd_event_(vk,0,#KEYEVENTF_KEYUP,0) ; Press the normal key.
ForEver
En gros ca ressemble à l'entry buffer de DB sauf qu'il veut pouvoir y ajouter des choses
Ca peut aussi s'utiliser pour des macros
on enregisre une série d'évennements (souris, clavier, raccourcis) et on les rebalance à volonté
[HS]
Super ce jeu, ca rapelle la version trash du lancé de pinguins
j'ai réussi à aller jusqu'à 1744 pieds ^^
(et je suis monté à plus de 120 pieds aussi)
[/HS]
je comprend pas trop qu'un flash ne prenne pas ce qu'on entre dans le "tambon clavier" ! Donc, j'imagine 2 choses : soit nous n'entrons pas assez en amont l'instruction, soit flash interroge d'une autre facon le clavier...
comme eric et ramzy : je ne vois que cette explication
SPH a écrit :je comprend pas trop qu'un flash ne prenne pas ce qu'on entre dans le "tambon clavier" ! Donc, j'imagine 2 choses : soit nous n'entrons pas assez en amont l'instruction, soit flash interroge d'une autre facon le clavier...
comme eric et ramzy : je ne vois que cette explication
peut etre que ton objet flash n'a pas le 'focus' tout simplement (?)
bah les flash sont un peu bizard . J'avais programmé un truc pour cacher les fenêtres mais à chaque fois les flashs (exe ou swf) reste affichés ou plantent .
SPH a écrit :je comprend pas trop qu'un flash ne prenne pas ce qu'on entre dans le "tambon clavier" ! Donc, j'imagine 2 choses : soit nous n'entrons pas assez en amont l'instruction, soit flash interroge d'une autre facon le clavier...
comme eric et ramzy : je ne vois que cette explication
peut etre que ton objet flash n'a pas le 'focus' tout simplement (?)
Le focus, C a dire : sont ils selectionné ?
Si c'est ca, oui, je les selectionne moi meme en cliquant dans le flash...
TROP BIEN http://media.nothingtoxic.com/uploads/8 ... 518246.swf
Ouvrez ce jeu et cliquez sur PLAY GAME.
Ensuite, ouvrez PB et mettez mon code.
Trouvez les bonnes coodonnées pour que le premier "SetCursorPos" pointe bien IE dans la barre de tache et pour que le 2eme pointe le jeu, puis laissez PB jouer au jeu
Procedure MouseEvent(Ereignis.l)
Mem.l=GlobalAlloc_(0,8)
GetCursorPos_(Mem)
mouse_event_(Ereignis | $8000,PeekL(Mem)*($FFFF/GetSystemMetrics_(0)),PeekL(Mem+4)*($FFFF/GetSystemMetrics_(1)),0,GetMessageExtraInfo_())
GlobalFree_(Mem)
EndProcedure
SetCursorPos_(330,1010) ; pointe IE dans la barre de lancement windows
MouseEvent($2) : MouseEvent($4) ; clic de souris pour mettre au premier plan le jeu
SetCursorPos_(640,512) ; pointe le jeu
Repeat
Delay(100)
MouseEvent($2) : MouseEvent($4) ; clic le jeu
Delay(100)
MouseEvent($2) : MouseEvent($4) ; demarre le velo
Delay(2430+Random(50)) ; attente raisonnable
MouseEvent($2) : MouseEvent($4) ; shoot du velo
ForEver