Sendkey dans un jeux video (autre application)

Résolu
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009 - 21 oct. 2009 à 11:08
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009 - 28 oct. 2009 à 17:29
Bonjour,

Je souhaite utiliser sendkey pour un jeux video.

J'ai une boite sur laquelle se trouve 30 boutons.
J'arrive à faire reconnaitre les 30 boutons et y associer une touche clavier mais lorsque je je lance le jeux et que j'actionne un bouton, l'action n'a pas lieu (pourtant sur dans un fichier texte oui).

J'ai vu ceci :

A///////

<DllImport("user32.dll", SetLastError:=True)> Private Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
End Function

<DllImport("user32.dll", SetLastError:=True)> Private Shared Function SetForegroundWindow(ByVal hWnd As IntPtr) As Boolean

End Function

B//////



Dim theHandle as IntPtr
theHandle = FindWindow( <<<< ICI je voudrais que ce soit mon jeux LOCKON.EXE merci de m'indiquer la syntaxe.
if theHandle <> IntPtr.Zero then
SetForegroundWindow(theHandle)
SendKeys.Send("{ENTER}")
end if

31 réponses

skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
28 oct. 2009 à 17:29
J'ai trouver une autre solution : Pinnacle Game Profiler (un logiciel permettant d'attribuer des touches à n'importe quelle joystick).

Dommage néanmoins que personnes n'est la solution en VB6 ! Avis aux experts...
3
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
21 oct. 2009 à 11:45
Bonjour,

Commence par vérifier que tu travailles bien en VB6, car certaines choses dans ton code laissent penser que non.

En fait on dirait un mix de VB6 et VB .NET !!!


Calade
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
21 oct. 2009 à 19:23
on ne pilote pas en faisant des SendKeys...

SendMessage WM_COMMAND semble une alternative convenable dans ton cas.
utilises Spy++ pour comprendre la chose

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
21 oct. 2009 à 21:16
ce n'est pas mon code, c'est juste un truc que j'ai vu. si c'est du .net je laisse bet (en effet ca me semblait pas etre du vb6 mais dans toutes mes fenetres ie ouverte je savais plus ou j'en était.

En faite voila mon code en étude :

Private Sub Timer1_Timer()
Static C As Long

Manette.dwSize = 64
Manette.dwFlags = JOY_RETURN_ALL

Call joyGetPosEx(0, Manette) ' Envoi toutes les informations du contrôleur n°0 dans "Manette"
'Call joyGetPosEx(1, Manette) ' Envoi toutes les informations du contrôleur n°1 dans "Manette"
'Call joyGetPosEx(2, Manette) ' Envoi toutes les informations du contrôleur n°2 dans "Manette"
'....

Form1.Cls
Form1.AutoRedraw = True
' Affichage des boutons :
Form1.FillStyle = vbFSSolid
Form1.DrawMode = vbCopyPen
For i% = 0 To 30
' Teste chaque bouton
If (Manette.dwButtons And (2 ^ i%)) > 0 Then
C = vbGreen ' bouton appuyé
Text1.Text = ""
Text1.Text = Manette.dwButtons
If Text1.Text = 4 Then

Send (e) <<<<<<<<<<<<<<<<<<<<<<<<<< ICI (lorsque j'actionne mon interupteur j'ai bien la lettre e qui s'ecrit dans un fichier texte. Mais lorsque je lance mon jeux et que j'actionne mon interupteur la commande "arret moteur" qui corespond à la touche e du clavier ne s'execute pas.




'
'
'keybd_event 162, 0, 0, 0 'CTRL
' keybd_event 69, 0, 0, 0 'E
' keybd_event 69, 0, 2, 0 'E
'keybd_event 69, 0, 0, 0 'E
'keybd_event 69, 0, 2, 0 'E
'keybd_event 69, 0, 0, 0 'E
'keybd_event 69, 0, 2, 0 'E
'keybd_event 162, 0, 0, 0 'CTRL
Text1.Text = ""
'relacher les touches
pause (1)
'
'
'
Else
End If
Else
C = vbRed ' bouton relaché
End If
Form1.FillColor = C: Form1.Circle (10 + 10 * i%, 10), 5, C
Next i

' Affichage des axes:
Form1.DrawMode = vbMaskNotPen
Form1.FillStyle = vbFSSolid

' Axe 1 (violet) :
C RGB(0, 255, 0): Form1.FillColor C
Form1.Circle (10 + Manette.dwXpos, 30 + Manette.dwYpos), 3, C

' Axe 2 (bleu ciel) :
C RGB(255, 0, 0): Form1.FillColor C
Form1.Circle (10 + Manette.dwRpos, 30 + Manette.dwZpos), 3, C

' Axe 3 (jaune) :
C RGB(0, 0, 255): Form1.FillColor C
Form1.Circle (10 + Manette.dwUpos, 30 + Manette.dwVpos), 3, C

Form1.AutoRedraw = False
Form1.FillStyle = vbFSTransparent
Form1.DrawMode = vbXorPen
Form1.Circle (10 + Manette.dwXpos, 30 + Manette.dwYpos), 5, QBColor(15)
Form1.Circle (10 + Manette.dwRpos, 30 + Manette.dwZpos), 5, QBColor(15)
Form1.Circle (10 + Manette.dwUpos, 30 + Manette.dwVpos), 5, QBColor(15)

Label1.Caption = _
"Xpos =" + Str$(Manette.dwXpos) + vbLf _
+ "Ypos =" + Str$(Manette.dwYpos) + vbLf _
+ "Zpos =" + Str$(Manette.dwZpos) + vbLf _
+ "Rpos =" + Str$(Manette.dwRpos) + vbLf _
+ "Upos =" + Str$(Manette.dwUpos) + vbLf _
+ "Vpos =" + Str$(Manette.dwVpos) + vbLf _
+ "'Point de vue' =" + Str$(Manette.dwPOV) + vbLf _
+ "qté boutons appuyés =" + Str$(Manette.dwButtonNumber) + vbLf _
+ "état boutons =" + Str$(Manette.dwButtons)

End Sub
0

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

Posez votre question
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 oct. 2009 à 08:34
En fait.... tu n'as même pas lu mon message, n'est-ce pas ?

je réexplique

tu sembles vouloir piloter une application windows.
c'est relativement simple.

Il te suffit pour cela de reproduire les messages recus par la fenetre ciblée.
Quand tu presses les boutons de la Fenetre cible, Celle-ci recoit un message WM_COMMAND indiquant l'identifiant du bouton.
En VB6, ca génèrerai un évenement _Click sur ton bouton...

il te suffit donc d'observer les messages recus par la fenetre cible (en utilisant Spy++)
et de renvoyer les même messages (avec SendMessage) au moment souhaité...

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 09:38
Je te remercie très sincerement pour ta réponse et j'ai vraiement besoin d'aide sur ce sujet.

En faite je ne suis pas sur que nous nous soyons compris. En faite je possede une interface branché sur le port parallele qui a 30 intrupteurs ON OFF. Avec mon prog, j'arrive à faire reconnaitre ces 30 interupteurs et y associer une action : exemple j'actionne l'interupteur 1 sur ma platine, et mon prog ecrit la lettre E dans un fichier texte.

Ce qui me pose probleme c'est lorsque je lance mon jeux, j'actionne mon intrupteur. Mais l'action associé à la lettre E ne s'execute pas.


Peux m'aider. Je ne connais pas bien ce dont tu me parle.
Peux tu me donner un bout de code stp ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 oct. 2009 à 09:44
ok pour le coté port parallèle, etc.
c'est un détail.

pour ce qui est du pilotage de ton application, cela reste inchangé...

fais ce que je t'ai indiqué :

lance ton jeu
espionne avec Spy++ la fenetre de ton jeu
observe les messages arrivant a ta fenetre de jeu quand tu cliques sur le bouton que tu souhaites piloter
cherche les WM_COMMAND et reproduit les pour simuler ton click à nouveau...


possible peut etre aussi de cibler le SendKeys : tu semble avoir le hWnd de la fenetre du jeu :

http://www.vbfrance.com/codes/SENDKEYSEX-SIMULER-TOUCHE-DANS-FENETRE-PRECISE_41974.aspx

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 10:18
Je veux pas passer pour un boulet mais je vois pas ou tu veux en venir avec WM_COMMAND et spy++

Comme je pourrais simuler des CTRL + E + E + E ?

Donne moi un peu de code stp.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 oct. 2009 à 10:28
As tu même simplement lancé Spy++ avant de me demander de tout faire à ta place ?

Je ne puis le faire... je n'ai pas sous la main l'application que tu souhaites piloter.

Chaque action de l'utilisateur (souris, clavier) et de nombreux evenement systemes génèrent des messages.

ces messages sont transmis aux applications interessées afin qu'elles les traite.
quand tu cliques sur ton bouton, windows génère un message a l'attention de la fenetre principale de ton jeu.
celui recoit un message WM_COMMAND avec en parametre l'id du couton pressé.

l'idée est d'utiliser Spy++ pour connaitre l'identifiant de ce bouton, et ainsi, il ne s'agira plus de simuler la pression sur 'E' ni même clicker sur le bouton, mais simplement dire a la fenêtre principale que le bouton a été clické.


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 11:10
Tu ne connaitrai pas une source ou ce type de commande est utilisé ? Je ne connnais rien de cette fonction et de la syntaxe.
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 11:11
Peux tu me donner le lien pour spy++ car je ne lle trouve pas sur google
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 oct. 2009 à 11:12
euh...

je tapes

Spy++

dans google, je trouve ça:
http://logiciel.codes-sources.com/logiciels/Spy-174.aspx

...



Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 11:15
Essai le lien ne marche pas
0
Calade Messages postés 1207 Date d'inscription dimanche 20 avril 2003 Statut Membre Dernière intervention 4 juin 2016 10
22 oct. 2009 à 11:25
Bonjour,

Je n'ai pas essayé le lien, mais Spy++ est livré avec VB6 et fait partie des modules complémentaires que tu peux sélectionner lors d'une installation personnalisée.


Calade
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 oct. 2009 à 11:30
l est certainement déjà installé sur ta machine...
il vient avec Visual Studio.

L'url de Download de la fiche est donc, naturellement :
http://msdn2.microsoft.com/fr-fr/vstudio/default.aspx


utilitaire similaire testé et approuvé :
http://www.windows-spy.com


testé avec la calculatrice de windows :
j'espionne la fenetre principale, je scrute les messages WM_COMMAND (possibilité de n'afficher qu'eux)

je presse la touche [1] de ma calculatrice, l'appclaition recoit :

WM_COMMAND
code: 1
control ID: 125
control hWnd: 0x00000000

la doc nous dit donc:
http://msdn.microsoft.com/en-us/library/ms647591(VS.85).aspx


Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Const WM_COMMAND As Long = &H111

Private Sub Form_Click()
SendMessage &H280BC6, WM_COMMAND, &H10000 + 125, ByVal 0&
End Sub


et hop!
je simule un click sur mon bouton 1
c'est simple, non ?

NB: &H280BC6 c'est la handle que tu dois t'amuser a trouver (FindWindow)



Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 11:47
Je comprends mieux ou tu veux en venir avec ton astuce.

Néanmoins je ne pense pas que cela va fonctionner pour mon jeux? car moi dans mon jeux je n'appuie sur aucun bouton comme pour la calculette.


En faite pendant que je joue, j'appuie sur E ou CTRL + EEE ou I de mon clavier et ca fait une action.
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 oct. 2009 à 11:53
A voir la techno utilisée...

si c'est en DirectX, par exemple, on est coincé, ton jeu lira l'etat du périphérique (clavier) sans passer par Windows

ok, je viens de regarder...
LOCKON.EXE

Lock On... jeu d'avion... ca risuque d'être galère, en effet ^^

Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 11:57
Pourtant un logiciel comme joytokey marche (mais ne me convient pas)
0
skyzo410 Messages postés 25 Date d'inscription mercredi 20 décembre 2000 Statut Membre Dernière intervention 28 octobre 2009
22 oct. 2009 à 11:59
On peux plus rien faire ?
0
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
22 oct. 2009 à 12:00
as tu tenté SendKeysEx, comme je te l'ai suggéré ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
0
Rejoignez-nous