Se connecter / S'enregistrer
Votre question

Simuler le clavier dans un jeu, Impossible ?

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
22 Août 2008 23:09:15

Salut

J'ai voulu tester la simulation d'un clavier dans un jeux pour faire tirer en non-stop mon personnage. Au début c'était surtous pour voir la gestion du clavier mais le problème est que hors jeux (bloc note par exemple) la touche fonctionne mais dans le jeux ca ne fonctionne pas. Voila mon code:

  1. #include <iostream>
  2. #include <windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8. HWND FenetreJeux = FindWindow(NULL,"Nom du programme j'ai testé avec ioUrban");
  9. SetForegroundWindow(FenetreJeux)
  10. SetFocus(FenetreJeux);
  11. while(1)
  12. {
  13. keybd_event('G',0,0,0);
  14. Sleep(1000);
  15. }
  16.  
  17. return 0;
  18. }


Si vous voyez ou est le problème n'ésité pas à poster.

Autres pages sur : simuler clavier jeu impossible

a b L Programmation
22 Août 2008 23:29:55

Tu envoies un évènement Windows à ton aplication, mais ton jeu (que je suppose créé avec DirectX) n'utilise pas cette gestion évènementielle pour le clavier mais celui de DirectInput.
Alors on fait quoi ? un programme qui utilise DirectX ? et bien non, parce sous DirectX on peut déclarer une utilisation exclusive du clavier.
En assembleur ? peut-être, mais à partir de windows XP, ce n'est pas la peine d'utiliser les interruptions DOS (21h), ça ne marchera pas (pour ça que ma signature B407 CD21 foire un peu sous XP :D  ), mais je suis persuadé que la solution en assembleur (certainement pas simple) existe.
22 Août 2008 23:32:41

Donc je suis obligé de passer par l'assembleur pour faire ca ? Je vais voir sur google ce que je peux faire.

Merci

edit:J'ai trouvé ce code qui permet de charger le code ASCII en mémoire pour faire croire qu'une touche du clavier a été préssé
  1. function SimulKey(Scan, ASCII: Byte): Boolean; assembler;
  2. asm
  3. mov ah, 05h
  4. mov ch, Scan
  5. mov cl, ASCII
  6. int 16h
  7. not al
  8. end;

La fonction est en pascal mais je ne devrait pas avoir de mal à la mettre en cpp. Mon seul soucis c'est que Scan correspond au scancode et je n'ai aucune idée de comment le récupérer. Si je suis sur une mauvaise voix pour résoudre mon problème alors dites le moi :) 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS