Keybd_event dans DirectX

Signaler
Messages postés
4
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
18 avril 2009
-
Messages postés
14
Date d'inscription
jeudi 25 juin 2009
Statut
Membre
Dernière intervention
3 juillet 2009
-
Bonjour,

Alors voilà, j'ai créé un petit programme qui simule l'appuie de certaines touches sur le clavier :

#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#include
#include <windows.h>


using namespace std;

int main(int argc, char *argv[])
{

Sleep(10000);


long i=1;

for(i=1;i<5;i+0) {
keybd_event(VK_TAB,0x09,0,0);
Sleep(1000);
keybd_event(VK_TAB,0x09,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F1,0x70,0,0);
keybd_event(VK_F1,0x70,KEYEVENTF_KEYUP,0);
Sleep(10000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
}

return EXIT_SUCCESS;
}




Cela fonctionne très bien dans notepad, ou n'importe quel autre programme, mais pas dans un jeu DirectX (en l'occurence ici : Rappelz). Comment faire pour que les ordres claviers soient pris en compte par une application DirectX ??

Merci de votre aide :)</windows.h></cstdlib></stdlib.h></stdio.h>
A voir également:

4 réponses

Messages postés
4
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
18 avril 2009

Bonjour,

Alors voilà, j'ai créé un petit programme qui simule l'appuie de certaines touches sur le clavier :

#include <stdio.h>
#include <stdlib.h>
#include <cstdlib>
#include
#include <windows.h>


using namespace std;

int main(int argc, char *argv[])
{

Sleep(10000);


long i=1;

for(i=1;i<5;i+0) {
keybd_event(VK_TAB,0x09,0,0);
Sleep(1000);
keybd_event(VK_TAB,0x09,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F1,0x70,0,0);
keybd_event(VK_F1,0x70,KEYEVENTF_KEYUP,0);
Sleep(10000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
keybd_event(VK_F2,0x71,0,0);
keybd_event(VK_F2,0x71,KEYEVENTF_KEYUP,0);
Sleep(1000);
}

return EXIT_SUCCESS;
}




Cela fonctionne très bien dans notepad, ou n'importe quel autre programme, mais pas dans un jeu DirectX (en l'occurence ici : Rappelz). Comment faire pour que les ordres claviers soient pris en compte par une application DirectX ??

Merci de votre aide :)
Messages postés
4
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
18 avril 2009

Svp j'ai vraiment besoin de trouver comment faire.
Messages postés
4
Date d'inscription
mardi 14 avril 2009
Statut
Membre
Dernière intervention
18 avril 2009

Peut être faut-il utiliser un autre language que le C/C++ pour que cela fonctionne ?
Ou inclure une librairie pour que cela fonctionne dans DirectX ?

Je suis ouvert à toutes propositions parce que la franchement je trouve rien ^^.
Messages postés
14
Date d'inscription
jeudi 25 juin 2009
Statut
Membre
Dernière intervention
3 juillet 2009
2
Slt,

Tu utilises quoi comme IDE ? Moi, c'est Code::Block.
Je suis dans la même impasse que toi ! J'arrive à simuler le clavier sur des programmes comme Bloc-Note, et Calculatrice...


Apparemment pour qu'une appliaction DirectX prenne en compte les événements du clavier, il faut utiliser "DirectInput" ?!?
Je suppose qu'il faut soit utiliser VB ou DirectX, pour réussir à faire un tel programme...( Ce n'est qu'une supposition  )

Bref, voilà un lien qui pourrait te donner une piste :

http://www.developpez.net/forums/d670601/dotnet/visual-basic-net/utiliser-directinput-simuler-appui-touche-clavier/

Si tu trouves quelque chose, fait le moi savoir STP. Ci-joint mon programme qui permet d'écrire " bonjour hawatak " avec n'importe quelle fenêtre sélectionné ( Ex: Bloc-Note ) dans un temps de 5 secondes

Code C - IDE ( Code::Block ):

#include <windows.h>
#include <stdio.h>
#include <conio.h>
int main(int argc, char * argv[])
{
     HWND hFore;
     char szBuffer[128];
     int iNbChar;


     printf("Vous avez 5 secondes pour activer la fenetre dont vous voulez connaitre le class name\r\n");
     printf("Appuyez sur une touche pour declancher le compteur ...");
     getch();
     Sleep(5000);


     hFore = GetForegroundWindow();
     iNbChar = GetClassName(hFore,szBuffer,128);
     if (iNbChar && (iNbChar < 128))
     {
          printf("\r\nLe class name de cette fenetre est :\r\n|%s|",szBuffer);
          printf("\r\nLes barres verticales (|) de gauche et droite n'en font pas partie\r\n");
     }
     else
     {
          printf("Impossible de recuperer le class name ou celui-ci est trop long\r\n");
     }
     SetForegroundWindow(FindWindow("%s",NULL));
    Sleep(100);
    keybd_event('B',0,0,0);
    keybd_event('B',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('O',0,0,0);
    keybd_event('O',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('N',0,0,0);
    keybd_event('N',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('J',0,0,0);
    keybd_event('J',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('O',0,0,0);
    keybd_event('O',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('U',0,0,0);
    keybd_event('U',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('R',0,0,0);
    keybd_event('R',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event(VK_SPACE,0,0,0);
    keybd_event(VK_SPACE,0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('H',0,0,0);
    keybd_event('H',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('A',0,0,0);
    keybd_event('A',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('W',0,0,0);
    keybd_event('W',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('A',0,0,0);
    keybd_event('A',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('T',0,0,0);
    keybd_event('T',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('A',0,0,0);
    keybd_event('A',0,KEYEVENTF_KEYUP,0);
    Sleep(500);
    keybd_event('K',0,0,0);
    keybd_event('K',0,KEYEVENTF_KEYUP,0);


    return 0;
}

By
Spasher Production_FB