Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Combo des touches dans un Hook [ Archives / Au secours ] (bdkiller)

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é 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 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 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! pb pour hooké la touche entrer et espace [ par BsEtZeOpLhD ] Salut.Voila mon problème : j'essaye d'empecher l'utilisation des touches entrer et espace dans toutes les fenêtre windows.J'ai essayer de faire un hoo Code ASCII [ par SuperDoudou ] SuperDoudouJe n'arrive pas trouver les touches dont les codes ascii sont 224 et 13.De +, est-ce que je me trompe si je pense que les codes ascii des [C] Interdire l'accès à certaines touches [ par Cow_B ] SalutBon, cette fois ci mon souci est le suivant : je demande à un utilisateur de rentrer un chiffre kelkil soit. Le problème c'est que si la personne WIN32 [ par xarier ] LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)Please C dans certain prog je vois cux qui utilise le lparam et d'autre q


Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, 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
Temps d'éxécution de la page : 2,153 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.