Probleme de keybd_event

fyedflowright Messages postés 5 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 21 août 2011 - 21 août 2011 à 00:02
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 21 août 2011 à 10:52
Bonjour je travaille sur VB2008 express et voici mon problème :
Je dois envoyer une frappe de la touche espace à un process.
J'ai commencé par essayer d'utiliser sendkeys, j'ai fait un truc du genre :

Dim calculatorHandle As IntPtr = FindWindow("MozillaWindowClass", "Google - Mozilla Firefox")
If calculatorHandle = IntPtr.Zero Then                      
    MsgBox("Software is not running.")
    Return
End If

SetForegroundWindow(calculatorHandle)
SendKeys.SendWait(Chr(32))


Cela fonctionne avec ma fenêtre Firefox mais me génère une exception sur le petit jeu auquel j’essaie d'accéder pour faire sauter mon personnage

Je me suis dit que c'était peut-être pas possible et que je devais essayer en plus bas niveau. j'ai donc tester une simulation brut d'une frappe comme ceci :

Const KEYEVENTF_KEYUP = &H2

 Sleep(2000) 'le temps de switch de fenêtre
 Call keybd_event(32, 0, 0, 0)
 Call keybd_event(32, 0, KEYEVENTF_KEYUP, 0)


Et là même problème, cela fonctionne si je passe Firefox en 1er plan mais pas avec le jeu. je précise que dans le 1er cas j'ai bien déclaré la lib user32.ddl et j'ai changé évidemment le ClassName et le WindowName. Dans le 2ème cas j'ai bien déclaré keybd_event (plutôt évident puisque ça compile )

Je cherche donc une explication voir même une solution !
Merci d'avance à tous.

11 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 août 2011 à 07:25
Bonjour,
1)
Dans le 2ème cas j'ai bien déclaré keybd_event (plutôt évident puisque ça compile

Montre comment est faite cette déclaration, s'il te plait.
2) certains jeux ne "recevront" que les touches physiques de ton clavier et "ignoreront" leur simulation.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
fyedflowright Messages postés 5 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 21 août 2011
21 août 2011 à 09:14
Bonjour UCfoutu et merci pour ton aide.

1)
Je l'ai déclaré de cette manière :
Private Declare Sub keybd_event Lib "user32" Alias "keybd_event" ( _
ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, _
ByVal dwExtraInfo As Long)


2)
Cela veut dire qu'on ne peut pas faire une simulation parfaire d'un appui de touche ? Je pensais pouvoir aller jusqu'à la couche matérielle .
Peut-être en C alors
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 août 2011 à 09:33
Déjà :
je travaille sur VB2008 express et voici mon problème

- tu as posté dans la rubrique VB6, mais tu développes sous VB.Net
- sous VB.Net, pas de long ===>> la déclaration de ta fonction est donc erronnée (elle correspond à VB6) ! ===>> transformer tes "long" en "Integer"


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 août 2011 à 09:39
EZt comme msdn reste ton meilleur ami ===>>
Consulte ici en t'arrêtant au code de déclaration sous VB.Net



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 août 2011 à 09:59
Quant à :
Cela veut dire qu'on ne peut pas faire une simulation parfaire d'un appui de touche ? Je pensais pouvoir aller jusqu'à la couche matérielle .
Peut-être en C alors

Il existe une autre solution beaucoup plus simple : jouer honnêtement.

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
fyedflowright Messages postés 5 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 21 août 2011
21 août 2011 à 10:00
Oui désolé on me proposait 2005 ou VB6 je savais pas quoi choisir
Je vais modifier tout ça et voir ce que ça donne. Merci beaucoup.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 août 2011 à 10:28
Tiens ===>> en attendant et si tu as du temps à perdre ce Dimanche ===>> Un peu de lecture intéressante
Ce sera (lire) au moins aussi (sinon beaucoup plus) enrichissant que vouloir jouer d'une "certaine manière"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
fyedflowright Messages postés 5 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 21 août 2011
21 août 2011 à 10:32

Il existe une autre solution beaucoup plus simple : jouer honnêtement

J'avoue , en fait je me refais FF7 pour la 10ème fois et je voulais bot la partie farm d'xp avant le combat contre les armes . Et en profiter pour me mettre au VB que je connais pas trop (je travaille du côté obscur de la force : assembleur, C, Pascal).

Donc voila le résultat après tes précieuses remarques :

'Déclaration comme indiqué dans ton lien

 <DllImport("user32.dll", EntryPoint:="keybd_event", CharSet:=CharSet.Auto, ExactSpelling:=True)> _
    Public Shared Sub Keybd_event(ByVal vk As Byte, ByVal scan As Byte, ByVal flags As Integer, ByVal extrainfo As Integer)
    End Sub

'appel de la méthode, j'ai rajouté le scan code de la touche espace et la possibilté extended même si je m'en servirai pas

Call Keybd_event(&H20, &H39, KEYEVENTF_EXTENDEDKEY Or 0, 0)
Call Keybd_event(&H20, &H39, KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP, 0)


Et ça ne marche toujours pas ! Ai-je fait une autre erreur ou le jeu est-il imperméable au simulation ?

Encore une fois merci d'avance pour vos réponses
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 août 2011 à 10:34
Ai-je fait une autre erreur ou le jeu est-il imperméable au simulation

réponse dans le lien que je t'ai invité à lire dans mon précédent message.
bonne lecture et bonnes conclusions

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
fyedflowright Messages postés 5 Date d'inscription mercredi 5 novembre 2008 Statut Membre Dernière intervention 21 août 2011
21 août 2011 à 10:48
Il est chouette ton lien, on doit pouvoir adapter des joystick avec ça. Par contre pour un novice comme moi ça à l'air assez complexe. J'ai pas trop compris ce qu'ils appellent une interface.
Par contre ici il y a un tuto complet en Français si ça intéresse d'autres personnes.
En tout cas merci pour ton aide UCfoutu, je vais mon plonger dans DirectInput
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
21 août 2011 à 10:52
je vais mon plonger dans DirectInput

je vois que tu as tout "compris" de ce que c'était !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous