begin process at 2010 02 10 15:35:36
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Windows

 > 

System

 > 

Utilisation de keybd_event


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Utilisation de keybd_event

lundi 9 juin 2008 à 08:49:39 | Utilisation de keybd_event

filoxera

Bonjour,
J'utilise Visual C++  de Visualstudio 2005 pour envoyer un mot de passe à une application,
Lorsque je fait:
keybd_event(0x62,0,0,0); //caractere 2
sleep(200);
keybd_event(0x60,0,0); // caractere 0
sleep(200);
keybd_event(0x50,0,0,0); //caractere p
sleep(200);
keybd_event(0x46,0,0,0); // caractere f
sleep(200);
keybd_event(VK_RETURN,0x0d,0,0);
tout se passe très bien
Je voudrais sans faire keybd_event pour chaque caractere, faire une boucle qui envoi
chaque caractere de mon mot de passe("20pf"), genre
do while 'fin du mot de passe'
keybd_event( code du caractere,0,0,0);
loop
Merci pour votre aide

lundi 9 juin 2008 à 10:15:27 | Re : Utilisation de keybd_event

jfrancois

Réponse acceptée !
Bonjour,

Quelque chose comme ça :

const char* szMotDePasse = "20pf";
for (int i=0 ; szMotDePasse[i] ; ++i)
{
   keybd_event(szMotDePasse[i],0,0,0);
   Sleep(200);
}
keybd_event(VK_RETURN,0x0d,0,0);


Jean-François

lundi 9 juin 2008 à 14:40:39 | Re : Utilisation de keybd_event

filoxera

Merci beaucoup Jean François, cela fonctionne très bien.
Mais dans l'application qui recoit le mote de passe, j'ai le message mot de passe invalide?
Je me demande si dans keybd_event( szMotDePasse[i],0,00), le szMotDePasse[i] ne devrait pas être transformé en Ox62 pour le '2' Ox60 pour le '0' etc...

Comment faire ?
Merci si tu as une idée

lundi 9 juin 2008 à 14:54:26 | Re : Utilisation de keybd_event

jfrancois



Jean-François

lundi 9 juin 2008 à 15:07:19 | Re : Utilisation de keybd_event

jfrancois

Mystère ! la réponse a été vidée !

Les codes ASCII 0x62 et 0x60 ne sont pas ceux de '2' et '0' mais ceux de 'b' et '`' (apostrophe inversée).

Essayer avec const char* szMotDePasse = "\x62\x60pf";
ou avec const char* szMotDePasse = "b`pf";



Jean-François

lundi 9 juin 2008 à 17:15:39 | Re : Utilisation de keybd_event

filoxera

En effet avec "\x62\x60\x50\x46" ça fonctionne, mais pas avec " \x62\60pf"
Il faudra donc je transforme mon mot de passe avec un tableau de correspondance genre 
switch szMotDepasse[i]
case 0:
szMotDePasse[i]=\x60
case 1:
szMotDePae[i]=\x61
case 2:
szMotDePasse|i]=\x62
.
.
Est-ce que je peux garder szMotDepasse[i](qui est un char) ou il faut que j'utilise une autre variable?
Merci encore Jean François pour cette aide précieuse

lundi 9 juin 2008 à 18:22:50 | Re : Utilisation de keybd_event

jfrancois

La fonction keybd_event() n'est pas d'une utilisation aussi simple !

Le premier paramètre de la fonction n'est pas le code ASCII du caractère à simuler mais un code virtuel correspondant. 0x60 et 0x62 sont les codes associés aux constantes VK_NUMPAD0 et VK_NUMPAD2 qui correspondent aux touches 0 et 2 du pavé numérique. Comme les codes 0x30 à 0x39 sont sensés correspondrent aux touches 0 à 9 (codes ASCII = codes virtuels pour ces touches là) je ne comprends pas pourquoi le mot de passe n'est pas compris !
 
Les lettres ont aussi le même code virtuel que le code ASCII (des lettres majuscules) et la touche NUM LOCK est prise en compte pour générer des minuscules ou des majuscules. Dans \x62\x60\x50\x46, \50\x46 = PF et non pf ! mais comme votre clavier doit être en mode minuscule c'est bien pf qui est généré. Si vous passez le clavier en majuscule, ça n'est plus reconnu ?

Jean-François

lundi 9 juin 2008 à 18:26:16 | Re : Utilisation de keybd_event

jfrancois

CAPS LOCK pour les minuscules/majuscules et non NUM LOCK !

Jean-François

lundi 9 juin 2008 à 21:12:05 | Re : Utilisation de keybd_event

jfrancois

Réponse acceptée !

Après quelques recherches sur Internet et quelques essais (en simulant l'écriture d'un texte dans une zone de saisie d'un programme windows), voici ce que j'obtiens (qui marche bien avec les chiffres et les lettres quelque soit le mode majuscule/minuscule du clavier, rien avec les autres caractères !) :

#include <windows.h>

void SimulerClavier
(
    const char* pszChaine // E:chaîne à envoyer
   ,int         iTempo    // E:tempo entre les caractères (ms)
)
{
   // --- Lire l'état actuel du clavier MAJ/min
   BYTE aKeyState[256];
   GetKeyboardState((LPBYTE)&aKeyState);
   bool bMin = ! (bool)(aKeyState[VK_CAPITAL] & 1);


   // --- Envoyer la chaîne caractère par caractère
   const char* pc = pszChaine;
   while (*pc)
   {
      if (*pc >= '0'  &&  *pc <= '9')
      {
         // --- Chiffre avec simulation de l'appui sur la touche SHIFT
         // --- (pour passer en mode majuscule pour obtenir les chiffres)
         if (bMin) keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0);
         keybd_event(*pc,0,0,0); // appui
         keybd_event(*pc,0,KEYEVENTF_KEYUP,0); // relâche
         if (bMin) keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);
      }
      else if (*pc >= 'a'  &&  *pc <= 'z')
      {
         // --- Lettre minuscule avec simulation de l'appui sur la touche
         // --- SHIFT (pour repasser en mode minuscule)
         char cMaj = *pc - 'a' + 'A'; // min --> maj
         if (! bMin) keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0);
         keybd_event(cMaj,MapVirtualKey(cMaj,0),0,0); // appui
         keybd_event(cMaj,MapVirtualKey(cMaj,0),KEYEVENTF_KEYUP,0); // relâche
         if (! bMin) keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);
      }
      else if (*pc >= 'A'  &&  *pc <= 'Z')
      {
         // --- Lettre majuscule avec simulation de l'appui sur la touche
         // --- SHIFT (pour passer en mode majuscule)
         if (bMin) keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),0,0);
         keybd_event(*pc,MapVirtualKey(*pc,0),0,0); // appui
         keybd_event(*pc,MapVirtualKey(*pc,0),KEYEVENTF_KEYUP,0); // relâche
         if (bMin) keybd_event(VK_SHIFT,MapVirtualKey(VK_SHIFT,0),KEYEVENTF_KEYUP,0);
      }
      else
      {
         // --- Autre caractère
         keybd_event(*pc,MapVirtualKey(*pc,0),0,0); // appui
         keybd_event(*pc,MapVirtualKey(*pc,0),KEYEVENTF_KEYUP,0); // relâche
      }
      ++pc; // caractère suivant

      // --- Tempo entre chaque caractère
      Sleep(iTempo);
   }

   // --- Envoyer le retour chariot final
   keybd_event(VK_RETURN,0x0D,0,0);
}


int main(void)
{
   SimulerClavier("20pf",200);
   system("pause");
   return 0;
}

Jean-François

vendredi 13 juin 2008 à 15:37:01 | Re : Utilisation de keybd_event

filoxera

Merci beaucoup Jean François pour cette recherche.
Je vais essayer d'intégrer cela dans mon code.



Cette discussion est classée dans : mot, caractere, passe, event, keybd


Répondre à ce message

Sujets en rapport avec ce message

vérification du mot de passe [ par biscot19 ] Bonjour,Je cherche comment vérifier un mot de passe NT en C++.J'ai vu que la fonction NetUserChangePassword permettait de le faire mais comme son nom acces base de donnée DAO protégée par mot de passe [ par Frederyck ] Bonjour,Alors je voudrais savoir comment faire pour acceder à une base de donnée Access 97 via DAO quand celle ci est protégée par mot de passe.J'aime comment protéger l'ouverture d'un fichier ? [ par f1cobra ] Bonjour, je voudrais protéger l'ouverture d'un fichier excell par un mot de passe, de manière a ce que seules les personnes ayant le mot de passe puis Mot de passe à l'ouverture d'une BDD [ par lyricman ] Bonjourje fais un programme en C++ (Borland C++ Builder 6) avec une base de données.le pb est que chaque fois que j'exécute mon programme, il me deman Controler impression [ par none77 ] Bonjour,j'aimerais controler les impressions a l'aide de mot de passe.En fait dès ke lon veut imprimer(sous Word par exemple), on demande un mot de p keybd_event et sleep [ par Xentor609 ] salut,J'utilise keybd_event pour simuler des touches du clavier.Juste qu'ici, j'ai aucun problème.Mais imaginons que j'utilise un sleep juste après, l détecter un mot de passe [ par Vortex99011 ] Bonjour,j'ai créé un programme " hook " qui récupère les données tapées au clavier. Le seul problème, c'est que ca récupère également les mot de passe creer un mot de passe (web) [ par Raphael2 ] bonjour,j'essai de creer un site où il faut que le visiteur entre un mot de passe pour accéder à une autre page.Mon probleme est de creer et de faire * Mot de passe [ par shenron ] Slt,vs savez comment on fait pour lorsqu'un user saisit une chaine de caractère, ce k'il tape se met en * comme si c t un mot de passe? mot de passe [ par scully2501 ] bonjourj'ai créér un site en php mais j'aimerai protéger ma page administration ("adm.php")avec un mot de passe hautement sécurisé pour que personne d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,952 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales