Partage
  • Partager sur Facebook
  • Partager sur Twitter

Contrôle du clavier en langage C

17 juin 2009 à 13:45:43

Bonjour, je cherche a contrôler le clavier. Sa veux dire je tape par exemple :

Salut les zéros.

Dans mon programme est je le lance est le clavier va écrire tout seul : Salut les zéros.
En langage C je veux faire sa.
Voila, merci d'avance
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
17 juin 2009 à 13:52:14

Citation : jullienn


le clavier va écrire tout seul : Salut les zéros.



Je comprend pas... tu veux que sa s'affiche "salut les zeros"?
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 13:55:19

comme un enregistreur de souris/clavier sauf en langage C.

Mon programme doit faire sa :

contrôle du clavier :
Salut les zéros.
FINI.

j'exécute le programme :

tout seul le clavier va écrire se qui est demander : Salut les zéros.
Je veux pas faire un : printf("salut les zéros");


  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 13:56:54

Tu veux simuler l'appui de touches au clavier c'est ça ?
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 14:10:17

Pas très bien compris, tu veux aussi que les touches s'enfoncent toutes seules? :D:D

Je rigole mais j'ai pas encore compris ce que tu veux...
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 14:14:47

:lol: , Je veux simuler l'appui de touche sur le clavier en langage C.

dans mon programme par exemple :

appui sur la touche ("S");
appui sur la touche ("A");
appui sur la touche ("L");
appui sur la touche ("U");
appui sur la touche ("T");

J'exécute est par exemple dans le bloc note ===> SALUT Qui est écrit tout seul.
J'espère être précis. :-°

  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 14:18:26

Oui c'est plus précis :)

Hé bien dans ce cas, tu dois faire :
- un scanf pour taper "Salut" dans la console
- écrire les caractères obtenus dans un fichier.

As-tu besoin de précisions où alors tu sais gérer ces 2 éléments?

Je n'aime pas donner les codes tous fait donc j'aimerais que tu y réfléchisses un peu aussi (c'est beaucoup mieux pour apprendre ^^)
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 14:22:22

Merci, mais la je vien de trouver un code interessent ^^.
Le voila :

#define _WIN32_WINNT 0x0501
//#define _WIN32_IE 0x0501
#include <windows.h>

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 hInstance, HINSTANCE x, PSTR y, int z)
{
Sleep(5000);
kbdSimule("le fameu message ecrit sur le block note apres 5 secondes");
keybd_event(VK_NUMPAD4,0,1,0); //touche enfoncé
keybd_event(VK_NUMPAD4,0,2,0); //touche relevé
Sleep(1000);
keybd_event(VK_NUMPAD4,0,1,0); //touche enfoncé
keybd_event(VK_NUMPAD4,0,2,0); //touche relevé

return 0;
}


Se code apres 5 sec (en miliseconde dans le code) écrit "le fameu message ecrit sur le block note apres 5 secondes"
Sa serai sa que je voudrais faire mais comment simuler l'appui sur la touche Entrer ?
Est pour quoi dans le bloc note par exemple il y a marqué 44 après minute
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 14:32:08

Hum ça se complique pour moi :)
J'arrive à écrire un mot dans un fichier via une méthode simple (je l'ai fais en 1 minute là, reste à l'améliorer un peu) mais je ne sais pas si je peux comprendre le code que tu viens de mettre :)
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 14:54:52

Moi je comprend juste sa :

Sleep(5000);
kbdSimule("le fameu message ecrit sur le block note apres 5 secondes");
keybd_event(VK_NUMPAD4,0,1,0); //touche enfoncé
keybd_event(VK_NUMPAD4,0,2,0); //touche relevé
Sleep(1000);
keybd_event(VK_NUMPAD4,0,1,0); //touche enfoncé
keybd_event(VK_NUMPAD4,0,2,0); //touche relevé

return 0;
}


Voila le code modifié qui marche très bien comme je le veux, mais qu'elle code taper pour appuiller sur la touche "ENTRER"

#define _WIN32_WINNT 0x0501
//#define _WIN32_IE 0x0501
#include <windows.h>

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 hInstance, HINSTANCE x, PSTR y, int z)
{
Sleep(5000);
kbdSimule("Salut les amis");
Sleep(5000);
kbdSimule("Vous allez bien ?");
return 0;
}



Malheureusement sa donne sa ==> Salut les amisVous allez bien ?
Je voudrais sa est sa serai parfait :

Sleep(5000);
kbdSimule("Salut les amis");
APPUI TOUCHE(ENTRER);
Sleep(5000);
kbdSimule("Vous allez bien ?");
return 0;


Si j arrive a faire sa mon problème serai résolut.
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 15:07:41

oui j'ai tesé, mais par exemple pour un logiciel ou autre il faut appuyer sur la touche entrer.
Donc il doit bien exister une fonction pour simuler la touche entrer.
Voila, merci d'avance
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 16:04:01

bonjour,ses bien beau touts sa mais ses pas portable sa marche que sous windows.
si vous conesser une metode qui marche sur LINUX dite le moi svp ,merci.
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 16:12:30

simpson44 je ne peux pas t aider attend d autre réponse.
Pour ma par ses bon j'ai trouver problème résolut.
Vola la commende pour la touche "entrer".

Sleep(100);
keybd_event(VK_RETURN,0,0,0);


Merci a tout se qui mon aidé.
J'ai trouvé la réponse grâce a Brugnar pour son lient.
A+++ merci encore !! :)
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 16:33:32

Citation : M@rek


- un scanf pour taper "Salut" dans la console



Pas de scanf pour la saisie au clavier !!! Lisez le chapitre de l'annexe de C sur la saisie de texte sécurisée ou faites une recherche google. Un scanf peut provoquer des buffer overflows (on peut limiter, d'accord mais ce n'est pas propre), et attend quelque chose de formaté (d'ou le "f" a la fin de "scanf"). Je ne comprends meme pas ce que tu veux faire. Tu veux saisir quelque chose au clavier pour l'écrire dans un fichier texte ? Dans ce cas, le tuto de m@teo peut te fournir les informations nécessaires. Il suffit de saisir le texte et de l'écrire directement dans un fichier ouvert en écriture grace a fopen...
  • Partager sur Facebook
  • Partager sur Twitter
17 juin 2009 à 17:02:28

Hauru tout se que tu viens de dire je le savais déjà, merci quand même.
Est mon problème est résolut, mais pour simpson44 pas encore résolu.
Voila a++
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2009 à 6:28:31

Citation : simpson44

bonjour,ses bien beau touts sa mais ses pas portable sa marche que sous windows.
si vous conesser une metode qui marche sur LINUX dite le moi svp ,merci.


Poste un topic, et bonne chance car il risque d'être locké avec cette orthographe :-°
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2009 à 10:35:31

Bonjour, alors voila je voudrais une petite aide car mon problème est pas a 100% résolut.

Enregistre dans une variable le nombre que l'utilisateur a tapé.

scanf("%ld", nombreEntrer);


simule un appui de touche pour taper le nombre que l'utilisateur a entré dans la variable nombreEntrer.

kbdSimule("%ld", nombreEntrer);
Sa ne marche pas sa plante. :colere2:

Voila aider moi svp.
Voila le code entier :

#define _WIN32_WINNT 0x0501
//#define _WIN32_IE 0x0501
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

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 hInstance, HINSTANCE x, PSTR y, int z)
{
   long nombreEntrer = 0;
  printf("Qu'elle est le nombre a reproduire ?\n");
 scanf("%ld", nombreEntrer);

kbdSimule("%ld", nombreEntrer);

return 0;
}
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2009 à 10:44:42

Es-tu sur d'avoir le niveau pour t'attaquer a ce genre de choses ?

Une erreur dans ton scanf, et l'autre bout de code je n'en parle même pas, c'est une horreur.

scanf("%ld", &nombreEntrer);
kbdSimule(nombreEntrer);


Es-tu conscient de ce que tu envoie à kbdSimule ? Sais-tu ce qu'il attend comme paramètre ?
  • Partager sur Facebook
  • Partager sur Twitter
18 juin 2009 à 10:50:25

Non, mais vue qu'un logiciel pareil est introuvable faut bien le faire.
je débute a peine en langage C, est oui pour le scanf désoler j'ai fait une faute que j'ai vue après se qui est avant le scanf c'est pas moi qui est codé.
j'ai réussis a simuler l'appui de touche.
Mais je voudrais que quand j'exécute mon programme il me demande qu'elle nombre a simuler.
Sa doit bien se faire.
Voila a+
  • Partager sur Facebook
  • Partager sur Twitter
22 juin 2009 à 21:24:26

et aussi faudrait pluto faire des code source portable parce que avec les API windows ta tous se qui faut mais esaye de le faire sous LINUX la tu dois TOUT faire ta function et la sa ce complique :-°
  • Partager sur Facebook
  • Partager sur Twitter
22 juin 2009 à 21:35:16

Il veut peut-être le faire juste pour s'entrainer aussi, et peut-être qu'il ne veux pas le faire pour linux ?
  • Partager sur Facebook
  • Partager sur Twitter
22 juin 2009 à 23:18:01

Ouah merci brugnar! c'est le lien que je cherchait depuis...
Et en plus c'est assez bien expliqué!(pas comme le tuto d'un certain Henri Garreta qui me fait fuir de developpez...)
Je suis pour un lien linux aussi ^^
  • Partager sur Facebook
  • Partager sur Twitter
6 mai 2019 à 21:14:48

slt je chercherai un code en c++ qui ouvre un fichier
  • Partager sur Facebook
  • Partager sur Twitter
Staff 22 juin 2019 à 17:20:27

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter