begin process at 2010 02 10 11:17:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Combo des touches dans un Hook


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

Combo des touches dans un Hook

lundi 6 décembre 2004 à 21:35:40 | Combo des touches dans un Hook

bdkiller

Salut,

encore moi avec les Hooks xD

J'arrive à mettre les hook en place, ca marche, sauf que je sais pas comment faire pour intercepter la combinaison de de touches (Ctrl + 1 par exemple).

J'ai ceci comme code:

LRESULT __stdcall HookClavier(int nCode, WPARAM wParam, LPARAM lParam)
{
if(nCode >= 0)
{
HWND hwamp;
hwamp = FindWindow("Notepad", 0);

if(wParam == VK_F8 && (lParam & 0x80000000)
{
PostMessage(hwamp, WM_KEYDOWN, VK_F5, 0);
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}


Comment puis-je rajouter une deuxieme touche?
mardi 7 décembre 2004 à 00:14:27 | Re : Combo des touches dans un Hook

racpp

Administrateur CodeS-SourceS
Salut,
Pour tester l'état de la touche Ctrl tu utilises la fonction GetKeyState() comme ceci:
int etat=GetKeyState(VK_CONTROL);

Cette fonction retourne 0 si aucune des deux touches Ctrl n'est enfoncée. Ainsi, dans ton code tu peux faire:
if(wParam == VK_F8 && GetKeyState(VK_CONTROL) && .....

mardi 7 décembre 2004 à 00:47:18 | Re : Combo des touches dans un Hook

racpp

Administrateur CodeS-SourceS
J'ai oublié de péciser que dans certains cas la fonction GetKeyState() peut retourner une valeur erronée. Pour éviter cela il faut faire: ... && (GetKeyState(VK_CONTROL) & 0x8000) .... comme ça on est sûr que la touche Ctrl est réellement enfoncée. A noter que cette fonction retourne normalement un SHORT mais fonctionne aussi avec un int.
mardi 7 décembre 2004 à 07:08:13 | Re : Combo des touches dans un Hook

bdkiller

Salut,
merci mais c'est déjà testé, ca marche pas..

je viens de faire ca ainsi:

if(nCode >= 0)
{
HWND hwamp;
hwamp = FindWindow("Notepad", 0);
//si je mets BOOL etat = ... ca revient en meme
int etat=GetKeyState(VK_CONTROL);

if(wParam == VK_F8 && (etat & 0x8000) && (lParam & 0x80000000))
{
PostMessage(hwamp, WM_KEYDOWN, VK_F5, 0);
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}


Ce qui est bizarre dans ce cas, c'est qu'il réagi quand j'appuis Alt Gr + F8 ! et il poste deux fois F5 dans notepad !!

J'ai testé de faire:

if(wParam == VK_F8 && (GetKeyState(VK_CONTROL) & 0x8000))


ca revient en même, marche pas.

Note: je suis sous win2k pro, ca peut jouer le role peut-etre?

Merci encore
mardi 7 décembre 2004 à 10:00:11 | Re : Combo des touches dans un Hook

BruNews

Administrateur CodeS-SourceS
Une maniere de tester:
if((GetKeyState(VK_CONTROL) >= 0xFFFFFF80) && (wParam == VK_F8))

ciao...
BruNews, MVP VC++
mardi 7 décembre 2004 à 13:57:17 | Re : Combo des touches dans un Hook

racpp

Administrateur CodeS-SourceS
Salut,
Voici une petite procédure de hook que je viens de tester avec mon code source :HOOK_GLOBAL_SANS_DLL

__declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)
{
if (nCode == HC_ACTION)
{
if (wParam==WM_KEYDOWN)
{
KBDLLHOOKSTRUCT hookstruct = *((KBDLLHOOKSTRUCT*)lParam);
if (hookstruct.vkCode==VK_F8 && (GetKeyState(VK_CONTROL) & 0x8000))
{
MessageBox(0,"CTRL+F8","",0);
}
}
}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}

Ca marche justement sur Win2k pro.

mardi 7 décembre 2004 à 21:06:37 | Re : Combo des touches dans un Hook

bdkiller

racpp je sais pas le mettre en place dans Borland c++ (dans quel evenement OnFormCreate ou ou encore...)

Bru, ca passe pas chez moi! :'(
mardi 7 décembre 2004 à 21:16:03 | Re : Combo des touches dans un Hook

BruNews

Administrateur CodeS-SourceS
Mais votre Borland, il ne permet pas d'ecrire du vrai code API au lieu de ne faire que de l'interprete avec des OnFormCreate et autres bidules mystiques ?
C'est tout de meme + simple quand on est maitre de son code.

ciao...
BruNews, MVP VC++
mardi 7 décembre 2004 à 22:42:25 | Re : Combo des touches dans un Hook

bdkiller

Aucunde idée Bru.

Ton code a l'air bon mais passe pas.

Si je mets juste :

if(wParam == VK_F8 && (lParam & 0x8000000))


la il fait correctement l'envoi de F5 sur notepad, si j'enleves 0x80000000 ca envoit 2 fois de suite F5...

et je sais pas pour quelle raison il marche pas avec ton code.


Cette discussion est classée dans : code, touches, wparam, hook, lparam


Répondre à ce message

Sujets en rapport avec ce message

Hook messages de windows [ par deck_bsd ] Bonjour a tous,Voila je suis sur le point de finir mon 1er hook, mais voila , il ne fonctionne que une fois. Il intercepte une fois le message voulu ( Hook clavier sous windows [ par gamani5 ] sltje sais il y a deja beaucoup de tuto sur le sujet mais j en ai lu plein mais j ai toujours un probleme, j arrive a detecter l utilisation d une tou Hook clavier et fenêtre premier plan [ par krokro6 ] Salut à tous, j'ai un petit problème avec ce code la : #include #include #include #include using namespace std;#define DLLEXPORT  __declsp HOOK - Help [DevCPP] [ par guitoulefoux ] Bonjour,J'essaye de faire un hook (mon 1er) mais a chaque fois qu'il se lance j'ai un pb d'affectation mémoire.en fait le HOOK récupère les actions cl [HOOK]Encore le meme probleme.. [ par bdkiller ] Salut,Bon, après pas mal d'heures passés là-dessus, j'ai la DLL qui se compile sans erreurs, l'appli principale qui se compile sans erreurs également! Hook des touches F5 d'une autre appli [ par Kheo ] Bonjour, Est ce que quelqu'un pourrait me donner quelques infos sur la méthode à employer pour capter des touches dans une autre appli.En fait je veux Windows Message OnNotifyIcon [ par unionx ] bonjourje veux savoir ou je vais trouver la fonction ::OnNotifyIcon(WPARAM wParam, LPARAM lParam) j'ai bien chercher dans la partie ClassWizard et eve transcodage arabe anglais [ par elmarokinho ] bonjour, je suis en DUT 2e année ... je dois réaliser un projet pr la mi-mars  ;:realisation d'un logiciel de transcodage anglais/arabe ...<br Je trouve pas le bon code [ par vah bi ] Bonjour à tous , voilà je débute en c et comme editeur j'ai le visual c++.Je  fais actuellement une application avec l'api de visual c++  mais en lang Comment faire pour re_afficher un dialogue apres "RedrawWindow" API sous DEV cpp [ par LouisJean ] louisjean dev cpp Bonjours a tous!Comment faire pour remontrer le dialogue "Mon_DIALOG" en API wind32 sous DEV


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,686 sec (4)

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