Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

SIMULER LES TOUCHES CLAVIER


Information sur la source

Catégorie :API Classé sous : simuler, touche, clavier Niveau : Débutant Date de création : 14/10/2005 Date de mise à jour : 06/04/2006 22:02:47 Vu / téléchargé: 18 386 / 1 124

Note :
8,75 / 10 - par 4 personnes
8,75 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (24)
Ajouter un commentaire et/ou une note


Description

Pour question récurrente sur forum.

Ouvrir une fenêtre notepad pour tester, pour cela que j'ai mis un Sleep(3000) on a le temps de mettre la notepad devant histoire qu'elle reçoive le texte.
2 versions dans zip, ansi et unicode, pour vérifier que va bon.
Renommer les exec en exe pour essayer sans avoir à compiler.

 

Source

  • void __stdcall kbdSimule(TCHAR *psz)
  • {
  • INPUT npt;
  • npt.ki.dwExtraInfo = npt.ki.time = 0;
  • npt.type = INPUT_KEYBOARD;
  • npt.ki.wVk = 0;
  • while(*psz) {
  • #ifdef UNICODE
  • npt.ki.wScan = (WORD) *psz;
  • #else
  • npt.ki.wScan = (WORD) (BYTE) *psz;
  • #endif
  • npt.ki.dwFlags = KEYEVENTF_UNICODE;
  • SendInput(1, &npt, sizeof(INPUT));
  • npt.ki.dwFlags = KEYEVENTF_UNICODE| KEYEVENTF_KEYUP;
  • SendInput(1, &npt, sizeof(INPUT));
  • psz++;
  • }
  • }
  • int WINAPI WinMain(HINSTANCE h, HINSTANCE x, LPSTR ystr, int z)
  • {
  • Sleep(3000);
  • kbdSimule("AEIOU àéïôù aeiou");
  • return 0;
  • }
void __stdcall kbdSimule(TCHAR *psz)
{
  INPUT npt;
  npt.ki.dwExtraInfo = npt.ki.time = 0;
  npt.type = INPUT_KEYBOARD;
  npt.ki.wVk = 0;
  while(*psz) {
#ifdef UNICODE
    npt.ki.wScan = (WORD) *psz;
#else
    npt.ki.wScan = (WORD) (BYTE) *psz;
#endif
    npt.ki.dwFlags = KEYEVENTF_UNICODE;
    SendInput(1, &npt, sizeof(INPUT));
    npt.ki.dwFlags =  KEYEVENTF_UNICODE| KEYEVENTF_KEYUP;
    SendInput(1, &npt, sizeof(INPUT));
    psz++;
  }
}

int WINAPI WinMain(HINSTANCE h, HINSTANCE x, LPSTR ystr, int z)
{
  Sleep(3000);
  kbdSimule("AEIOU àéïôù aeiou");
  return 0;
}

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !
  •   kbdAnsi
    •   release
      • kbdAnsi.execTélécharger ce fichier [Réservé aux membres club]22 528 octets
    • kbdAnsi.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier690 octets
    • kbdAnsi.ncbTélécharger ce fichier [Réservé aux membres club]27 648 octets
    • kbdAnsi.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier903 octets
    • kbdAnsi.suoTélécharger ce fichier [Réservé aux membres club]9 216 octets
    • kbdAnsi.vcprojTélécharger ce fichier [Réservé aux membres club]3 741 octets
  •   kbdUnc
    •   release
      • kbdAnsi.execTélécharger ce fichier [Réservé aux membres club]22 528 octets
    • kbdAnsi.cppTélécharger ce fichier [Réservé aux membres club]Voir ce fichier691 octets
    • kbdAnsi.ncbTélécharger ce fichier [Réservé aux membres club]27 648 octets
    • kbdAnsi.slnTélécharger ce fichier [Réservé aux membres club]Voir ce fichier903 octets
    • kbdAnsi.suoTélécharger ce fichier [Réservé aux membres club]9 216 octets
    • kbdAnsi.vcprojTélécharger ce fichier [Réservé aux membres club]3 741 octets

Télécharger le zip

Historique

26 octobre 2005 16:37:05 :
Site
06 avril 2006 22:02:47 :
Commentaire.

Commentaires et avis

signaler à un administrateur
Commentaire de MuPuF le 14/10/2005 23:24:31

bonjour brunews, j'ai une question :

A quoi servent __stdcall, __fastcall et l'autre dont je me souviens plus le nom, je me doute que c'est une facon d'appeller la fonction (lors de la tranformation en asm) mais je suis pas sur ...

signaler à un administrateur
Commentaire de BruNews le 14/10/2005 23:32:21 administrateur CS

cdecl : params sur stack, appelant dépile, c'est pas le  rapide mais ça permet les fonctions avec nbr de params indéfinis (sprintf par exemple).
stdcal : params sur stack, fonction dépile.
fastcall : les 2 premiers params par registre (ECX puis EDX), le reste sur stack, fonction dépile. C'est 'normalement' le plus rapide mais il convient d'étudier chaque cas.

signaler à un administrateur
Commentaire de MuPuF le 14/10/2005 23:56:14

faut que je me mette a l'asm lol, heuresement que j'ai 1 minimum de notion sinon ça aurait été du chinois, merci encore !
Tans que j'y suis, je préviens que je travaille a une nouvelle version de filesender qui approche de sa maturitée finale (je l'adore ce petit), je rappelle le lien http://www.cppfrance.com/code.aspx?ID=33958.

Encore merci brunews ...

signaler à un administrateur
Commentaire de poppyto le 15/10/2005 09:32:13 administrateur CS

Pas mal :). A noter qu'on peut se servir de la structure MOUSEINPUT pour déplacer/cliquer la souris. Pour information, La différence entre keybd_event/mouse_event et SendInput est que SendIpnut accepte une liste de structure. Du coup on peut écrire tout une séquence (pour une démo?) et n'effectuer qu'un appel de fonction.

signaler à un administrateur
Commentaire de BruNews le 15/10/2005 09:42:57 administrateur CS

Je n'ai pas fait en 1 seul appel ici cause qu'on ne connait pas ce qui arrive en param, il aurait fallu faire 2 routines au cas où la longueur aurait été trop importante et aurait empêché l'alloc mémoire du tableau de INPUT.
De toute manière c'était vraiment parce qu'on voit souvent cette question sinon l'envoi de touches clavier sur un system multitache est vraiment à bannir.

signaler à un administrateur
Commentaire de victorcoasne le 15/10/2005 10:05:29

BruNew revient avec la sa nouvelle source toujours plus API !

signaler à un administrateur
Commentaire de poppyto le 15/10/2005 18:28:40 administrateur CS

>l'envoi de touches clavier sur un system multitache est vraiment
>à bannir.

Sauf peut-être pour un virus qui a de l'humour :-D

signaler à un administrateur
Commentaire de NoRabbit le 16/10/2005 23:30:21

sinon, comment faire pour simuler une touche enfoncée pendant x secondes ?

signaler à un administrateur
Commentaire de poppyto le 16/10/2005 23:34:16 administrateur CS

un bon vieux do/whlie pardi :D

void EnfoncerTouche(int Secondes,int touche)
{

DWORD Time1 = GetTickCount();

do
{
   SendInput...
}
while(GetTickCount()-Time1 < Secondes*1000)

}

signaler à un administrateur
Commentaire de BruNews le 16/10/2005 23:41:43 administrateur CS

simuler pendant x secondes ???
Faudrait tout de même pas délirer, tu comptes ligoter l'utilisateur pendant ce temps ???

signaler à un administrateur
Commentaire de NoRabbit le 17/10/2005 15:13:09

non, justement en évitant la boucle...
Il n'y a pas de fonction qui permet de simuler une touche enfoncée et une autre qui simulerait la touche lorsqu'elle est relevée ?
J'imagine qu'il s'agit juste de changer l'état d'une touche du clavier quelque part...

signaler à un administrateur
Commentaire de BruNews le 17/10/2005 15:16:08 administrateur CS

Regarde dans la boucle du code, il y a bien les 2 états, appuyé et relaché.

signaler à un administrateur
Commentaire de NoRabbit le 17/10/2005 16:49:40

ha oui sorry

signaler à un administrateur
Commentaire de Oeil_de_taupe le 27/10/2005 21:43:14

A noter que keybd_event a été remplcé par SendInput. Mais dans quel cas nous avons besoin de cette fonction? Ce ne serait pas un peu du bricolage? (je veux dire par là qu'il y a d'autre solutions qui me paraissent plus intéréssantes)

signaler à un administrateur
Commentaire de BruNews le 27/10/2005 22:36:24 administrateur CS

Je l'ai déjà écrit plus haut:
"De toute manière c'était vraiment parce qu'on voit souvent cette question sinon l'envoi de touches clavier sur un system multitache est vraiment à bannir."

signaler à un administrateur
Commentaire de piranhaworld le 02/11/2005 22:38:56

je suis encore un newbi en C++, mais à la compil (sous VCPP) il me sort "'INPUT' : undeclared identifier" du coup s'enchaine une 20aine d'erreur..

je suis bien parti du .cpp du zip.. (quand même)

merci

signaler à un administrateur
Commentaire de poppyto le 02/11/2005 22:41:42 administrateur CS

à insérer en début de source :
#include <windows.h>

Eventuellement télécharger le dernier SDK si rien n'y peut.

signaler à un administrateur
Commentaire de BruNews le 02/11/2005 22:44:56 administrateur CS

essaie
#define _WIN32_WINNT 0x0500
AVANT
#include <windows.h>

signaler à un administrateur
Commentaire de brownfire le 02/12/2005 18:21:32

a moi pour simuler les touches du clavier j'utilise
keybd_event (VK_NOMDELATOUCHE,0,0,0);

signaler à un administrateur
Commentaire de shadowshine le 03/12/2005 04:34:40

chui un newbie com on les aime pas, mais je fais comment sachant que windows.h n'existe pas sous visual C++ 2005 ? :/

signaler à un administrateur
Commentaire de shadowshine le 03/12/2005 05:04:06

ok pardon, jai installé le SDK, du coup j'include le windows.h, mais à la compile il me dit toujours que la fonction SendInput n'existe pas.. help :(

signaler à un administrateur
Commentaire de shadowshine le 03/12/2005 05:10:42

la fonction keybd_event() existe par contre, mais j'obtiens ces erreurs :

error LNK2001: unresolved external symbol "extern "C" int __stdcall GetKeyboardState(unsigned char *)" (?GetKeyboardState@@$$J14YGHPAE@Z)

error LNK2001: unresolved external symbol "extern "C" void __stdcall keybd_event(unsigned char,unsigned char,unsigned long,unsigned long)" (?keybd_event@@$$J216YGXEEKK@Z)

signaler à un administrateur
Commentaire de BruNews le 03/12/2005 09:41:37 administrateur CS

Toujours mettre dans cet ordre:
#define _WIN32_WINNT 0x0501
#define _WIN32_IE 0x0501
#include <windows.h>

signaler à un administrateur
Commentaire de brownfire le 03/12/2005 15:10:28

a ok moi je programme sous dev-c++ c surement pour ca ! et tkt moi oci chui un news

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Simuler la pression d'une touche du clavier [ par sebastienbro ] J'utilise c++ builder 6, et j'aimerais simuler la pression de la touche Entrée. Mais voilà, comment faire !! Existe t'il une fonction qui fait ça auto Win32 simulation de touche du clavier [ par zibo3 ] Bonjour, j'ai un petit souci, j'aimerai pouvoir simuler l'appuie sur la touche TAB mais avec la touche SHIFT appuyé.Je sais que je dois envoyé un évén gestion clavier sous mfc [ par dambeaufort ] bonjour a tous, j'ai regarder les messages deja preent dans le forum mais je n'arrive pas a efectuer la chose suivante:J'aimerais sous une application les touche F..du clavier [ par Battousai ] salut,je suis entrain d'ecrir un programme en c en mode dos (que j'éspere poster sur ce site), et j'aimerait y ajouter l'utilisation des toucher F1,F2 Simuler mon clavier a partir de mon site web [ par supergrey ] Salut, je voudrais savoir comment faire pour simuler des appuis sur les touches de mon clavier a partir d'une page html sur&nbsp;mon site web.Je sais gestion du clavier [ par Myts ] SalutJe programme sous TC++ (turbo c++) sous dos.Et j'ai un probleme concernant la gestion du clavier.Mon jeux, prochainement sur ce site, doit effect clavier : La touche Windows et la touche alt [ par bily ] Vegeta :-)Salut,je voudrais savoir comment a l'aide d'un boutton bloquer et debloquer la touche wndows en esperant que son raccourci "ctrl+echap" soie IMPORTANT CLAVIER WINDOWS BLOQUER [ par bily ] Vegeta :-)Salut,je voudrais savoir comment a l'aide d'un boutton bloquer et debloquer la touche wndows en esperant que son raccourci "ctrl+echap" soie Simuler l'appui de la touche F11 pour le plein écran sous Internet Explorer en Java [ par astrolynx ] Meilleurs voeux à tous, et à ceux que vous aimez ou appréciez...Question :Je souhaite afficher mon site en plein écran dès la connexion.Je connais la simuler une entrée au clavier [ par HCJarod ] Salut,est-il possible (et si oui comment) de faire croire à un programme que quelqu'un tape sur une touche? Un exemple pour fixé les idées : un progra


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,390 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.