Emuler un joystick avec la souris [Résolu]

Signaler
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
-
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
-
Salut.

Il existe une certain nombre de programmes qui permettent de contrôler la souris à l'aide d'un joystick ou d'un joypad. Je souhaiterais pouvoir faire l'inverse. C'est-à-dire que les mouvements de mon trackball émulent ceux du stick analogique d'un joypad et que les deux clics de mon trackball émulent deux des boutons du joypad. Vous vous demandez certainement pourquoi. Et bien parce que je suis une personne handicapée qui peut seulement utiliser un trackball et ses deux boutons pour contrôler son ordinateur. Il se trouve que j'adore les jeux de course de voitures, mais vu que 99% d'entre eux sont uniquement jouable au clavier ou au joystick/joypad , je ne peux plus y jouer. Les jeux comme les GTA (sauf le dernier) permettent de contrôler la direction des véhicules avec la souris. Le seul problème c'est qu'il n'y a aucun indicateur visuel permettant de savoir dans quelle direction sont orientées les roue du véhicule. Avec un joystick, c'est simple, quand on le laisse a sa position 0, les roue sont droite. Vu que la souris ne revient pas toute seule à sa position 0, c'est pas très pratique. Ce que je voudrais risque de pas être simple à programmer. Petite précision, pour contrôler mon clavier, je dispose d'un clavier à défilement que j'utilise avec un seul contacteur. C'est pratique pour par exemple faire Echap dans un jeu mais c'est bien trop lent pour jouer à un jeux de voiture. Voici mon idée (dites moi si ça vous parait faisable) :
imaginons un programme qui fonctionne en arrière plan du jeux, que l'on active ou désactive grâce à une combinaison de touches. Quand il est désactivé, la souris fonctionne normalement et quand il est activé la souris émule le joystick. Ca c'est la première partie , mais la suite risque d'être plus compliqué. Tout d'abord, est-il possible d'afficher par dessus un jeux DirectX en plein écran des graphismes ou des caractères ? Je pense que oui car le programme FRAPS permet par exemple d'afficher le nombre d'images par secondes d'un jeu DirectX dans un coin de l'écran. Imaginons que l'on fasse apparaitre sur l'écran une croix graduée horizontalement et verticalement avec un point qui se déplace en fonction des mouvement du trackball. Quand le point est au centre de la croix, le joystick émulé est à la position 0 (le véhicule a les roues droites et est au point mort). Quand le point se trouve tout en haut à gauche le véhicule accélère à fond et tourne au maximum vers la gauche. Cela émulerait donc parfaitement un stick analogique et on aurait un repère visuel pour l'accélération, le freinage et la direction. Les deux clics du trackball pourrait servir par exemple pour activer la nitro et changer de vue. Mon message est très long mais je voulais être assez précis sur mon idée. Si vous pensez que c'est faisable, dites-le moi. Si oui, est-ce que certains d'entre vous se sentirais de le programmer. Si vous y arriviez, ce serait vraiment génial. Je pourrais le passer à mes amis handicapés et le diffuser sur internet pour tout les autres (en vous citant et en vous remerciant bien sûr). Merci d'avoir pris le temps de me lire.

Bye.

44 réponses

Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Bon ben c'est pas mal, j'ai trouvé 2 composants qui vont nous être forts utiles : HookMouse, de Phidels, qui permet d'intercepter tous les mouvements de la souris (et même de les bloquer mais c'est risqué), et AMHotKeys (qui permet d'enregistrer des raccourcis clavier même si notre application n'a pas la focalisation). Et aussi un composant pour mettre dans la zone de notification.
Bien sûr on aurait pu coder tout ça nous-mêmes, mais bon autant aller vite :)

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Oui tout à fait, et même pas seulement au jeu mais à tout le système (enfin les autres applications n'auront pas besoin de savoir qu'un joystick a bougé ...). Après il y a les détails de calibrage que je ne pourrai pas effectuer n'ayant pas de joystick :/

Cordialement, Bacterius !
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Dis-moi j'aurai besoin d'un renseignement : est-ce que ton joystick USB est reconnu par Windows ? Pour le savoir, tu peux aller dans le panneau de configuration => Contrôleurs de jeu.

Cordialement, Bacterius !
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Pour l'instant il n'est pas connecté à l'ordi. Je vais demander qu'on me le branche. Mais je sais que quand il est branché, Windows XP le détecte automatiquement et le fais apparaitre dans "Contrôleurs de jeu".
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
C'est une bonne chose. Je donnerai à ton problème ma complète attention ce week-end normalement (eh ouais même au 3eme trimestre le lycée c'est dur ...).
Pourras-tu, en attendant, essayer de te renseigner sur les messages de joystick ?

Cordialement, Bacterius !
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Ok, je vais me renseigner.
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Je sais pas si ça peut servir : http://autohotkey.free.fr/docs/KeyList.htm
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Salut,

Ici. Mais le développeur est au bout du rouleau.
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Salut.

Merci pour ton aide rt15.

Salut Bacterius.

J'ai connecté mon joystick USB, Windows le détecte automatiquement, il apparait dans "Contrôleurs de Jeu", je l'ai testé, il marche sans problèmes. Il dispose d'une croix multi-directionnelle à gauche, des boutons "Start" et "Select" au milieu, des boutons 1, 2, 3 et 4 à droite et des boutons L1, R1, L2 et R2 sur le devant. Ce qui nous intéresse, c'est la croix pour les axes X et Y et les boutons 1 et 2. La croix n'est pas analogique, c'est simplement quatre contacts, mais je pense que ça ne change rien pour nous. Le logiciel "JoyToKey" permet de faire exactement l'inverse de ce qu'on recherche, c'est-à-dire qu'il permet de contrôler la souris (et le clavier) avec un joystick. Si ça marche dans un sens, il n'y a pas de raison que ça ne marche pas dans l'autre. Par contre, je ne sais si ça fonctionne avec des jeux DirectX.

A+.
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Voici ce que j'ai trouvé, peut-être que ça pourra servir :

"Je ne me souviens plus des détails, mais il est possible d'insérer une
sorte de filtre au milieu de la chaine des bidules en charge de gérer
les entrées (souris, clavier etc...) sur Windows XP."

http://www.microsoft.com/whdc/archive/HID_HWID.mspx

"Sinon, autre possibilité (plus simple), en restant dans l'espace
utilisateur et vu que la cible connue (machin lié à directx), il suffit
de parasiter ces dlls (par exemple par injection dans le process qui
les utilise etc...)."

http://research.microsoft.com/en-us/projects/detours/

Voilà.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Mon lien pointe vers un logiciel qui a la capacité suivante : "Joystick emulation using the keyboard or mouse ". Il me semble que c'est ce qui est recherché...

Concernant le joystick, dans un jeu on utilise généralement DirectInput de DirectX 9.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Salut Bacterius et rt15.
 
Merci à tous les deux pour votre aide. Le programme PPJoy fait en grande partie ce que je voulais. Il installe d'abord un driver virtuel pour port parallèle puis un driver virtuel pour joystick sur port parallèle qui fait croire au système qu'un ou plusieurs joystick sont connectés et fonctionnels. Même si aucun port parallèle n'est présent dans l'ordinateur et auncun joystick n'est connecté à l'ordinateur, cela fonctionne. Et de plus, ça marche avec tous les jeux. On lance ensuite le programme PPJoyMouse qui permet de contrôler le joystick virtuel avec la souris. Ou encore mieux, on lance le programme GlovePIE qui permet de faire la même chose (voire beaucoup mieux et beaucoup plus) à l'aide de scripts. La boule de la souris contrôle les axes X et Y (ou d'autres si l'on veux) et les clics gauche et droit contrôles les boutons 1 et 2 (ou d'autres si l'on veux). Pour les jeux "Need For Speed Underground 2" et "TrackMania United Forever" j'utilise la boule uniquement pour la direction et le clic droit pour accélérer. Le clic gauche reste quand à lui le clic normal pour les menus. Pour ces deux jeux un curseur de souris reste apparant même quand je pilote un véhicule. J'ai donc un repère visuel pour la direction. Quand le curseur est au centre de l'arrière de la voiture, les roues sont droites. Par contre pour le jeu "Burnout Paradise", le curseur ne reste pas apparant, c'est donc moins pratique. Il faudrait faire un petit programme qui permete de faire apparaitre une croix à l'écran (par dessus les jeux DirectX) dont on pourrait définir la couleur, la taille et la position. Pour définir la position, on utiliserais les coordonées de l'image affichés selon la résolution de l'ecran, c'est d'ailleurs comme ça que l'on peut définir la zone active de l'écran pour contrôler le joystick avec la souris en utilisant un script de GlovePIE. Ce programme ferait aussi apparaitre un curseur pour indiquer la position de la souris. Grace à cette croix et au curseur on aurait un repère visuel dans tous les jeux.

A+.
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Donc, tu as trouvé pour l'émulation souris-joystick, il te manque juste le repère visuel pour savoir dans quelle position se trouverait le joystick pour bouger en fonction ?

Cordialement, Bacterius !
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Oui, c'est tout-à-fait ça.
Ce serai assez simple à programmer, non ?
Tu pense pouvoir le faire ?
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Ca dépend, tu as le source de GlovePIE ou de PPJoyMouse ?
Mais je pense pouvoir le faire, mais pas ce week-end je ne pense pas.

Cordialement, Bacterius !
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
11
Il y a SetCursor, SetCursorPos et ShowCursor qui peuvent peu être aider. Mais les jeux risquent de pas être tout à fait d'accord...
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Ben non, moi je pensais plutôt à intercepter les messages du joystick factice eux-mêmes simulés par PPJoyMouse, et à bouger le repère en fonction. Et l'initialisation se ferait avec un raccourci clavier sur le système ?

Cordialement, Bacterius !
Messages postés
25
Date d'inscription
lundi 29 avril 2002
Statut
Membre
Dernière intervention
8 avril 2009
1
Salut.

Admettons que je joue en 1024x768. Pour définir la dimension de la zone active de l'écran pour l'émulation joystick, je délimite un carré de 200x200 dont les coordonnées sont 413,285 et 612,484 à l'aide du script que j'aurai choisi dans GlovePIE. On fait de même pour définir notre carré qui apparaitrait à l'écran. Bien sur, on fait en sorte de pouvoir spécifier les coordonnées de notre choix pour les faire correspondre à celle du script. Le contour de carré ferait un pixel d'épaisseur et à l'intérieur se trouverait notre croix qui ferait deux pixels d'épaisseur. On pourrait choisir la couleur du carré et de la croix. Je dis un carré pour l'exemple, mais ça pourrait très bien être un rectangle.
Bacterius, ne serait-il pas plus simple d'utiliser la position de la souris pour faire bouger le repère à l'écran ? Notre programme serait totalement indépendant de PPJoy et de GlovePIE. Quand plus haut j'ai parlé de faire apparaitre un curseur de souris, je ne parlais pas forcément d'un curseur géré par windows mais d'un repère de forme quelconque géré par notre programme. Pour l'activer, je n'ai pas besoin d'un raccourci clavier car, comme pour GlovePIE, il suffit que j'appuis sur la touche "Menu Démarrer" avec mon clavier à défilement pour plier le jeu. Je lance ensuite GlovePIE, je l'active, je lance notre programme et je retourne dans le jeu.

A+.
Messages postés
3793
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
8
Ce qu'il risque d'y avoir comme problèmes pour le mouvement de la souris c'est que les jeux DirectX risquent de bloquer la souris. Par exemple, certains jeux sans souris couperont totalement l'accès à la souris pour ne pas être embêtés, tandis que d'autres attendent un mouvement de l'utilisateur, et dès qu'il bouge la souris, il calcule le mouvement X et le mouvement Y (DeltaX, DeltaY), et puis il remet la souris au milieu de l'écran. Ca serait barbare d'essayer de récupérer la position de souris au moment où le jeu calcule les DeltaX et DeltaY ^^ Alors qu'avec le joystick, on est sûr d'avoir les messages quand on veut.

Cordialement, Bacterius !