Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ecouter les touches du clavier

lorsque le prog est executé en arrière plan

4 octobre 2008 à 22:46:03

Bonsoir!!

Voila mon petit problème:
Je sais écouté les événements du clavier, mais uniquement lorsque je suis sur la fenêtre du programme.

Mais mon programme doit pouvoir récupérer les évènements du clavier même quand il est exécuté en arrière plan.
Ce que je voudrais savoir c'est comment écouter ces évènements là?

Merci beaucoup des réponses que vous pouvez m'apporter a ce sujet.
Mes amitiés.
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 0:11:41

Si tu as quelqu'un a espionner, sois franc avec lui, regarde le droit dans les yeux, et dit lui de te parler...
Parce que programmer ce que tu veux faire n'est en général pas pour une utilisation tres catholique
  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

5 octobre 2008 à 0:24:48

Citation : Fvirtman

Si tu as quelqu'un a espionner, sois franc avec lui, regarde le droit dans les yeux, et dit lui de te parler...
Parce que programmer ce que tu veux faire n'est en général pas pour une utilisation tres catholique



N'importe quoi ...

Ce que veut faire herudo, c'est juste que son programme réponde a son clavier même s'il n'est pas au premier plan.

Je ne vois pas pourquoi tu parles d'espionnage ...

--

Sinon je ne vois pas comment faire ce que tu recherches ...
Et j'avoue même ne pas savoir si cela est envisageable.
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 1:29:56

Merci de vos réponses.

leonsulivan a bien compris ce que je veux faire, et l'utilisation est tout à fais conforme a la loi et je n'espionne personne :D . Ce n'est pas un virus ou un trojan^^. Je souhaite juste configurer une touche pour permettre de stopper mon programme. C'est une boucle infinie qui doit s'arrêter a l'appuie sur cette touche préalablement définie.
Je sais que c'est possible, j'ai des programme qui utilise cette fonctionnalité. Si seulement je pouvais accéder aux codes sources ça me simplifierais la vie.
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 1:38:12

Citation : Pas de titre

[...] Je souhaite juste configurer une touche pour permettre de stopper mon programme.C'est une boucle infinie qui doit s'arrêter a l'appuie sur cette touche préalablement définie. [...]



Bon j'imagine que tu as déjà réfléchi à la question, mais pourquoi as tu besoin que le programme puisse se quitter même s'il n'est pas au premier plan ?

Cela ne sait-il pas suffisant de juste ajouter une condition à la boucle ?
( un booléen initialisé à faux qui passerait a vrai si la touche Échappe a été appuyée durant la boucle )
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
5 octobre 2008 à 6:56:53

Salut,

Ca depend du systeme visé. Sous windows, tu as plusieurs moyen de recuperer des appuis hors-focus, soit les hooks system-wide (mais c'est tres bourrin ici), soit les hotkeys, plutot adapté dans le cas present.

Le principe etant d'enregistrer une combinaison de touche par RegisterHotKey, et tu recevras les appuis de cette combinaison par une notif WM_HOTKEY.

Bref, MSDN toussa.
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 10:59:12

Merci de vos réponses. Je vais me pencher sur les hotkeys voir ce que je peux trouver.

pour leonsulivan, j'ai bien un booléen en condition de sortie de boucle qui change d'état à l'appuie sur ma touche, mais mon problème est pour détecté cet événement.
Comme mon programme agis sur une autre fenêtre, celui ci n'est jamais en premier plan.

Je vais chercher un peu de doc sur les hotkeys car je suis bien sur windows (vista).

Si jamais quelqu'un passe par là et a un bon tuto je suis preneur :D.

Merci a tous!
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 13:33:12

Citation : herudo

pour leonsulivan, j'ai bien un booléen en condition de sortie de boucle qui change d'état à l'appuie sur ma touche, mais mon problème est pour détecté cet événement.
Comme mon programme agis sur une autre fenêtre, celui ci n'est jamais en premier plan.


Je me doutais bien que tu avait déjà réfléchi à la question et que tu ne venais pas demander quelque chose qui ne t'était pas nécessaire, mais bon on ne sais jamais ;)

Bonne chance.
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 13:39:48

J'ai bien trouvé quelques chose qui pourrait être solution de mon problème mais je n'arrive pas a m'en servir :D.
c'est OnShortCut(), qui permet de récupérer les évènements avant qu'ils soient envoyé aux applications:

Citation : Description


__property TShortCutEvent OnShortCut;
Utilisez l'événement OnShortCut pour distribuer les frappes de raccourcis clavier avant qu'ils ne soient gérés par la fiche ou ses contrôles. Quand l'utilisateur appuie sur une touche, l'application a l'opportunité de la distribuer comme touche de raccourci au lieu du traitement standard des frappes de touches (OnKeyDown, OnKeyPress et OnKeyUp). Le traitement prédéfini des raccourcis est défini pour les raccourcis de menu et les actions associées à la fiche. OnShortCut permet à la fiche de définir d'autres raccourcis.

Si le gestionnaire d'événement OnShortCut implémente une réponse pour la frappe d'une touche, initialisez le paramètre Handled à true. Cela empêche la transmission de la frappe de touche aux menus ou actions associés à l'application. Cela empêche aussi le traitement de frappe de touche standard, de la même manière qu'un raccourci d'action ou de menu.
Remarque: Appelez la méthode CancelDispatch à partir d'un gestionnaire d'événement OnShortCut pour éviter que l'application n'envoie l'événement à n'importe quel autre objet d'événements d'application.


Mon problème réside principalement sur le fais que je ne sais pas quoi inclure :D .

Si quelqu'un sais comment s'en servir, il est le bienvenue.
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 17:41:43

#include <windows.h> ...?
  • Partager sur Facebook
  • Partager sur Twitter
5 octobre 2008 à 18:18:20

Déjà inclus..

Merci de ta réponse.
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2008 à 8:07:45

#include <windows.h>

int WINAPI WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d)
{
  MSG   msg;

  MessageBox(0, "Tapez  Ctrl + Shift + Q  pour Quitter.", "Début...", 64);
  RegisterHotKey(0, 1234, MOD_CONTROL|MOD_SHIFT, 'Q');

  while(GetMessage(&msg, 0, 0, 0))
  {
    DispatchMessage(&msg);

    if(msg.message == WM_HOTKEY && msg.wParam == 1234)
      break;
   }

  UnregisterHotKey(0, 1234);
  MessageBox(0, "Fin du programme !", "Suite et ...", 64);
  return 0;
}

  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2008 à 11:57:32

Les hotkeys n'ont rien à voir ici
Utiliser les hooks du RIT (voir chez les pros du forum fr.comp.os.ms-windows.programmation, où tous les hooks ont été détaillés depuis les années 90)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
6 octobre 2008 à 13:00:38

Une injection globale pour une touche ? Sur, c'est de la solution de pro ! =p

Mais en fait georges, tu es une sorte de bot qui fait la promotion de ton NG, non ?

Bref, @L'op : Magma t'a donné un sample de la manip, y a plus qu'à.
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2008 à 14:17:32

Nous voyons bien la différence entre Magma : un des gars que je préfère lire sur ce forum, avec toujours des exemples sympa, et Georges, avec ses discours rabaissants, qui ne nous a jamais rien prouvé au niveau compétence.

On a les deux extrèmes la : le gars super fort et utile, et le gros boulet inutile. Un beau contraste.
  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

6 octobre 2008 à 14:40:13

Mmm... petite question HS (ie : j'ai rien compris, lol), y a t il un rapport entre apalet et georges (à part la même façon de répondre) ?
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2008 à 14:41:59

C'est le meme mec qui se cache derriere ces pseudos !
(A moins bien sur qu'on aie affaire a un copycat...)
  • Partager sur Facebook
  • Partager sur Twitter

Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

6 octobre 2008 à 15:06:12

Ok c'est ce que je me disais. D'un certain côté c'est une bonne chose, l'espace d'un instant j'ai eu peur qu'ils soient plusieurs, lol.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
6 octobre 2008 à 17:01:00

Citation : moi281184

Mmm... petite question HS (ie : j'ai rien compris, lol), y a t il un rapport entre apalet et georges (à part la même façon de répondre) ?



" .... La reponse à cette question à deja etait donné donné 8192 fois depuis 200 ans, sur le NG fr.comp.leetonly.touslesdeveloppeursfontdesapplisbancaires ....

C'est un monde ca ! Mort aux bibliotheques et aux moyens simples !"

Mon bot georges marche à la perfection. Prochaine release, les insultes ! =D

=> [_]
  • Partager sur Facebook
  • Partager sur Twitter
6 octobre 2008 à 19:03:11

Merci a tous pour vos réponses!

Un merci particulier a magma pour le code de sa fonction. Je voudrais juste avoir quelques précisions, afin de comprendre ce que je fais si ça ne vous dérange pas :D.

déjà dans la déclaration de la fonction si quelqu'un pouvais m'expliquer tout ça :D
int WINAPI WinMain(HINSTANCE a, HINSTANCE b, LPSTR c, int d)


ensuite j'aperçois une boucle et là je crois que je mélange un peu:
while(GetMessage(&msg, 0, 0, 0))
  {
    DispatchMessage(&msg);

    if(msg.message == WM_HOTKEY && msg.wParam == 1234)
      break;
   }


la boucle va s'arrêter lorsque Ctrl + Shift + Q seront appuiés. Mais dois-je insérer le code mon programme dans cette boucle afin qu'il s'exécute jusqu'à ce que les touches soient saisies??

  • Partager sur Facebook
  • Partager sur Twitter
8 octobre 2008 à 17:29:28

Voila un tutoriel qui t'aideras à comprendre tout ça : tuto.

A+
  • Partager sur Facebook
  • Partager sur Twitter
22 juillet 2014 à 1:11:15

utilise ça ;)

#include<windows.h>

BOOL bContinue = TRUE;

while (bContinue)
     {
     if (GetKeyState(VK_ESCAPE) & Mask )
               bContinue = FALSE;
     
     

     //le reste de ton code ici 
      
     }

-
Edité par Etienne L 22 juillet 2014 à 20:02:18

  • Partager sur Facebook
  • Partager sur Twitter
22 juillet 2014 à 22:14:58

Je pense qu'en 6 ans il a soit réussi à capture les événements, soit abandonné le projet..
  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2024 à 13:27:42

leonsulivan a écrit:

Citation : Fvirtman

Si tu as quelqu'un a espionner, sois franc avec lui, regarde le droit dans les yeux, et dit lui de te parler...
Parce que programmer ce que tu veux faire n'est en général pas pour une utilisation tres catholique



N'importe quoi ...

Ce que veut faire herudo, c'est juste que son programme réponde a son clavier même s'il n'est pas au premier plan.

Je ne vois pas pourquoi tu parles d'espionnage ...

--

Sinon je ne vois pas comment faire ce que tu recherches ...
Et j'avoue même ne pas savoir si cela est envisageable.

Si on peut faire un keylogger un enregistrer de frapp en arrière plan et on envoi tout les touche frapper dans le .txt a chaque démarage de session a son email ça permet d'espioner



  • Partager sur Facebook
  • Partager sur Twitter
11 mai 2024 à 18:26:36

@Tina-13 Bonsoir, merci de ne pas squatter le sujet des autres et de ne pas répondre dans une citation (on ne sais plus qui dit quoi), créer votre propre sujet dans le respect des règles du forum à savoir qu'un message commence par des règles de politesses (Un bonjour ou des salutations à la communauté et se termine par des remerciements par avances pour les futures réponses), la description de votre problème et le code que vous avez écrit inséré sur le forum à l'aide de l'outil d'intégration de code soit le bouton code </>.

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

Liens conseillés

Je ferme ici.

  • Partager sur Facebook
  • Partager sur Twitter