Sendkey dans un jeux video (autre application) [Résolu]

Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 21 oct. 2009 à 11:08 - Dernière réponse :
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
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
Afficher la suite 

Votre réponse

31 réponses

Meilleure réponse
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 28 oct. 2009 à 17:29
3
Merci
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...

Merci skyzo410 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de skyzo410
Messages postés
1212
Date d'inscription
dimanche 20 avril 2003
Dernière intervention
4 juin 2016
- 21 oct. 2009 à 11:45
0
Merci
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
Commenter la réponse de Calade
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 21 oct. 2009 à 19:23
0
Merci
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
Commenter la réponse de Renfield
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 21 oct. 2009 à 21:16
0
Merci
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
Commenter la réponse de skyzo410
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 22 oct. 2009 à 08:34
0
Merci
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
Commenter la réponse de Renfield
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 09:38
0
Merci
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 ?
Commenter la réponse de skyzo410
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 22 oct. 2009 à 09:44
0
Merci
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
Commenter la réponse de Renfield
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 10:18
0
Merci
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.
Commenter la réponse de skyzo410
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 22 oct. 2009 à 10:28
0
Merci
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
Commenter la réponse de Renfield
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 11:10
0
Merci
Tu ne connaitrai pas une source ou ce type de commande est utilisé ? Je ne connnais rien de cette fonction et de la syntaxe.
Commenter la réponse de skyzo410
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 11:11
0
Merci
Peux tu me donner le lien pour spy++ car je ne lle trouve pas sur google
Commenter la réponse de skyzo410
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 22 oct. 2009 à 11:12
0
Merci
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
Commenter la réponse de Renfield
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 11:15
0
Merci
Essai le lien ne marche pas
Commenter la réponse de skyzo410
Messages postés
1212
Date d'inscription
dimanche 20 avril 2003
Dernière intervention
4 juin 2016
- 22 oct. 2009 à 11:25
0
Merci
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
Commenter la réponse de Calade
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 22 oct. 2009 à 11:30
0
Merci
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
Commenter la réponse de Renfield
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 11:47
0
Merci
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.
Commenter la réponse de skyzo410
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 22 oct. 2009 à 11:53
0
Merci
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
Commenter la réponse de Renfield
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 11:57
0
Merci
Pourtant un logiciel comme joytokey marche (mais ne me convient pas)
Commenter la réponse de skyzo410
Messages postés
25
Date d'inscription
mercredi 20 décembre 2000
Dernière intervention
28 octobre 2009
- 22 oct. 2009 à 11:59
0
Merci
On peux plus rien faire ?
Commenter la réponse de skyzo410
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
- 22 oct. 2009 à 12:00
0
Merci
as tu tenté SendKeysEx, comme je te l'ai suggéré ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.