alvinp
Messages postés167Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention31 août 2011
-
13 nov. 2007 à 18:22
alvinp
Messages postés167Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention31 août 2011
-
23 nov. 2007 à 20:31
Je sais que beaucoup de questions sont posées à ce sujet mais j'ai justement un problème avec la merveilleuse fonction que j'ai trouvé (sa a l'air d'être le cas pour les autres aussi)!
La simulation d'appui sur les touches du clavier fonctionnent très bien mais dans les jeux de voiture que j'ai pu tester (TrackMania, FlatOut), le pilotage est impossible.
J'utilise dans cette fonction keybd_event, mais je ne pense pas que sa a un rapport avec celle-ci!
Aidez-moi s'il vous plaît, si tout ce passe bien pour mon programme, je publierai celui-ci sur ces pages
Pseudo :: PyroFrissons ou Mr Blagues
<hints id="hah_hints"></hints>
alvinp
Messages postés167Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention31 août 2011 13 nov. 2007 à 22:34
Nouvelle image avec petite démo des accélérateurs et des diodes alumées (vous pouvez retrouver un affichage des accélérateur de la wiimote sur un script car c'est de lui que je me suis inspiré, j'y ai ajouté l'affichage des sources infrarouge)!
Pseudo :: PyroFrissons ou Mr Blagues
<hints id="hah_hints"></hints>
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 14 nov. 2007 à 00:43
Salut, une majorité des jeux utilisent DirectInput pour gérer le clavier.. les frappes du clavier simulées avec keybd_event ou SendInput devraient être interprétées par DirectInput.. (Je sais que ça marche quand on simule la souris avec SendInput mais je n'ai pas testé avec le clavier.)
alvinp
Messages postés167Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention31 août 2011 15 nov. 2007 à 18:33
Merci pour ce lien, j'ai essayé mais sa a peut être à voir avec le focus comme tu dis!
J'ai tenté d'utiliser ce qui est donné en utilisant pour récupérer le focus ceci ::
SetFocus(FindWindow(null, "TmUnited"));
Puis voici la bout de code qui fait la simulation (Par Villard Grégory) ::
c static void FrappeClavier(VirtualKeys Touche)
{
FrappeClavier(Touche, GetForegroundWindow());
}
public static void FrappeClavier(VirtualKeys Touche, IntPtr hWnd)
{
IntPtr ptr = GetForegroundWindow();
if (ptr != hWnd) SetForegroundWindow(hWnd);
alvinp
Messages postés167Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention31 août 2011 18 nov. 2007 à 16:12
Pour le moment je n'arrive toujours pas à faire fonctionner ceci dans mes jeux mais toutes les tentatives fonctionnaient sur des programmes (ex: blocnote ...)!
Voici un aperçu de mon programme maintenant ::
Pseudo :: PyroFrissons ou Mr Blagues
<hints id="hah_hints"></hints>
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 19 nov. 2007 à 09:22
Essaye en donnant le focus à un contrôle en particulier dans ta forme. Tu peux retrouver le handle d'un contrôle d'une autre application avec FindWindowEx .
private void WriteToNotepad( string text )
{
// Cherche si un nouvelle fenêtre de notepad est déja ouverte.
IntPtr hWnd = FindWindow( null, WINDOW_NAME );
// Ouvre une nouvelle fenêtre de notepad.
if ( hWnd == IntPtr.Zero )
{
Process p = Process.Start( "notepad.exe" );
p.WaitForInputIdle( 500 );
hWnd = p.MainWindowHandle;
p.Close( );
p = null;
}
// Obtient la fenêtre d'édition ( avec le ClassName ).
hWnd = FindWindowEx( hWnd, IntPtr.Zero, "Edit", null );
if ( hWnd == IntPtr.Zero )
throw new Win32Exception( );
foreach( char c in text )
PostMessage( hWnd, WM_CHAR, ( UIntPtr )c, IntPtr.Zero );
}
VirtualKeys.VK_RETURN c'est égale à 0x0D soit 13 en int! => touche "Entrer"
j'ai essayé et sa ne fonctionne pas, j'arrive comme avec les autres méthodes à récupérer le handle,
mais sa ne fonctionne jamais, parcontre dans FlatOut toute marche,
seulement dans le menu mais comme pour TrackMania, dans le jeu il ne donne rien!
D'après ce que j'ai récupérer comme information c'est parce que les jeux utilisent DirectInput et qu'en quelque sorte ils sont connecté au périphérique directement. Donc il faudrai passer directement dans le périphérique (je dis mais je je sais pas comment faire)
C'est un peu frustrant de ne pas y arriver, certains ont dit sur internet qu'ils créé leurs propre dll DirectInput et changeait celle présente afin d'en avoir le contrôle mais je ne veux en aucun cas utiliser cette méthode.
De plus, le programme GlovePie fonctionne parfaitement et je me pose énormément de questions à ce sujet!
Si quelqu'un sait sa!! Sa me serai très très utile
Pseudo :: PyroFrissons ou Mr Blagues
<hints id="hah_hints"></hints>
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 23 nov. 2007 à 13:22
Le plus important dans mon code précédent c'était surtout FindWindowEx qui permet de récupérer le handle d'un contrôle en particulier et non pas de la forme. En plus si c'est VK_RETURN que tu veux envoyer il faut utiliser WM_KEYDOWN et pas WM_CHAR.
Je ne connais pas ton jeu, je ne sais pas comment il est foutu, mais envoyé des touches à un contrôle en particulier ou à toute la forme, c'est différent. Donc si ton jeu contient un/des contrôle(s), même invisible :
- Soit tu donnes le focus au contrôle + SendInput ( voir page précédente ).
- Soit FindWindowEx + PostMessage ( voir plus haut ).
alvinp
Messages postés167Date d'inscriptionmardi 27 juillet 2004StatutMembreDernière intervention31 août 2011 23 nov. 2007 à 17:44
Ok, si je n'ai pas utilisé "FindWindowEx", c'est parce que je ne sais pas du tout comment est fait le jeu mais je connais le titre de la fenêtre grâce à son apparition en barre des tâches!
Je vais essayer avec ce que tu me dis, et je te donne des nouvelles
Pseudo :: PyroFrissons ou Mr Blagues
<hints id="hah_hints"></hints>