Récupérer des entrées clavier hors d'une fenêtre Win21

Signaler
Messages postés
54
Date d'inscription
dimanche 27 février 2005
Statut
Membre
Dernière intervention
21 juin 2007
-
Messages postés
54
Date d'inscription
dimanche 27 février 2005
Statut
Membre
Dernière intervention
21 juin 2007
-
Salut ! Bon j'ai un problème pour un p'tit programme idiot que j'ai fait, c'est un piano tout con en C qui joue de la musique avec votre tourelle quand on appuie sur les touches du clavier ( en gros c'est un switch et un getch dans un while , rien de bien extra-ordinaire). Maintenant je voudrais que mon programme puisse lire les touches enfoncée du clavier même en dehors de la fenêtre du programme ! Mon prof m'a conseillé de me renseigner sur SDL, ce que j'ai fait mais le problème reste le même : quand on sort de la fenêtre il s'occupe plus de ce que je fais avec mon clavier !
Si quelqu'un a une idée à me proposer :)
( PS : à terme mon but serait de faire disparaitre cette fenêtre pour n'avoir qu'une icône dans la barre à côté de l'horloge , comme MSN quoi)

Merci d'avance ;)


L'ordinateur fait toujours ce qu'on lui demande !
Le problème c'est qu'il ne comprend pas ce qu'on lui demande ...

4 réponses

Messages postés
196
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
1 mai 2009
2
salut. Alors voila le soucis. Windows est un systeme d'exploitation dans lequel plusieurs programmes peuvent être lancés. chacun de ces programme appelé processus occupe un espace mémoire virtuel alloué par Windows. il est impossible à un programme exe situé dans un espace mémoire intervienne dans un espace mémoire d'un autre programme exe directement. c'est une sécurité de windows. La seule façon de le faire, c'est d'utiliser une procédure de Hook. Il s'agit d'une DLL chargée en mémoire au moyen d'un programme de lancement, DLL qui va détourner des évènements Windows des autrs processus. notre DLL pourra gérer ces évènements dfférement avant de les renvoyer à leur processus initial.
J'ai fait un petit programme de hook pour espionner ce qui est tapé sur ma bécane, je vais le mettre en source, mais je dois le pauffiner un peu. dès qu'il est prêt je te l'envoie.
PS : on utilise une DLL, car c'est le seul programme qui sous Windows peut accéder à des processus différents de celui qui l'a lancé.

LaPatoshe
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
27
Quelques exemples de hook:
HOOK SYSTEM SUR WM_MOUSEWHEEL (WIN32)
http://www.cppfrance.com/code.aspx?ID=25998
DLL HOOK EN RESSOURCE BINAIRE DU PROG (WIN32)
http://www.cppfrance.com/code.aspx?id=25450
HOOK F11 SUR IE (WIN32)
http://www.cppfrance.com/code.aspx?id=18202
HOOK CLAVIER
http://www.cppfrance.com/code.aspx?id=17818
LIMITE LE NBR DE FENETRES IE V2 (WIN32)
http://www.cppfrance.com/code.aspx?id=17387
NO TASK MANAGER (WIN32)
http://www.cppfrance.com/code.aspx?id=11186
HOOK DE ENTER SUR DIALOGBOX (WIN32)
http://www.cppfrance.com/code.aspx?id=11007
HOOK SUR FENETRE (WIN32)
http://www.cppfrance.com/code.aspx?id=10997
AJOUTER UN MENU A NOTEPAD (WIN32)
http://www.cppfrance.com/code.aspx?ID=28181

ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,

Voici un petit programme sans fenêtre qui joue des notes quand on
tape les touches AZERTYUI du clavier quelque soit l'application active.
Il utilise le petit haut-parleur de l'unité centrale. Il s'agit d'un
hook clavier. Pour arrêter le programme et le hook, tu tapes F12.

#define _WIN32_WINNT 0x0400

#include <windows.h>

HHOOK hHook;

DWORD notes[8]={523,587,659,698,784,880,987,1046};

LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)

{

if ((nCode HC_ACTION) && (wParam WM_KEYDOWN))

{

KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam);

if (hookstruct.vkCode==VK_F12) PostQuitMessage(0);

DWORD scan=hookstruct.scanCode;

if (scan>15 && scan<24) Beep(notes[scan-16],100);

}

return CallNextHookEx(hHook, nCode, wParam, lParam);

}



int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrev, LPSTR lpCmd,int nShow )

{

hHook = SetWindowsHookEx( WH_KEYBOARD_LL, (HOOKPROC) HookProc, hInstance, 0);

MSG Msg;

while( GetMessage(&Msg, 0, 0, 0))

{

TranslateMessage( &Msg );

}

UnhookWindowsHookEx(hHook);

return 0;

}

Ca fonctionne sur Windows 2000 ou XP. A toi de le perfectionner. J'espère qu'il te sera utile.
Messages postés
54
Date d'inscription
dimanche 27 février 2005
Statut
Membre
Dernière intervention
21 juin 2007
1
OKay merci tout le monde je vais étudier cette piste là donc :)
Je sens que je vais me manger une bonne migraine moi pour mes vacances :D
Je posterais mon prog quand je l'aurais fini ;)
Ah et juste j'ai l'air idiot ,c'est bien sur une faute de frappe dans le titre , je parle de Win32 et pas Win21 :)


L'ordinateur fait toujours ce qu'on lui demande !
Le problème c'est qu'il ne comprend pas ce qu'on lui demande ...