skyzo410
Messages postés25Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention28 octobre 2009
-
21 oct. 2009 à 11:08
skyzo410
Messages postés25Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention28 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
skyzo410
Messages postés25Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention28 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.
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
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202171 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é...
skyzo410
Messages postés25Date d'inscriptionmercredi 20 décembre 2000StatutMembreDernière intervention28 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 ?
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202171 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 :
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202171 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é.
Calade
Messages postés1207Date d'inscriptiondimanche 20 avril 2003StatutMembreDernière intervention 4 juin 201610 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.
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)