begin process at 2012 05 29 19:05:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Pbm HOOK_CBT


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

Pbm HOOK_CBT

vendredi 23 janvier 2004 à 21:05:36 | Pbm HOOK_CBT

lastpixl

J'ai essayé de mettre un en place un hook CBT comme pour les autres types de hooks, mais à chaque fois quand je lance le programme il me plante mon envoronnement de developpement (BCB5).
La source plus bas est le code d'un DLL, qui est loadé par un autre exe, qui appelle la fonction InitHook, puis EndHook quand il se quitte.

Est-ce que quelqu'un pourrait m'expliquer pourquoi ca plante ?

Merci, Lastpix'l.



//Source

#include <stdio.h>
#include <vcl.h>
#include <windows.h>
#pragma hdrstop
#include "LMCONS.H" // pour UNLEN

#pragma argsused
#include <windows.h>


void _export InitHook(HWND hDest);
void _export EndHook();

HHOOK CBTHookHandle;
LRESULT CALLBACK CBTProc(int nCode,WPARAM wParam,LPARAM lParam);
// fonction d'initialisation de la DLL
int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
HInst = hinst;
switch (reason)
{
case DLL_PROCESS_ATTACH : // à la création de l'instance de la DLL
break;
case DLL_PROCESS_DETACH : // au détachement de la DLL

break;

default :
break;
}
return 1;
}

//------------------------------------------------------------------------------

//------------------------------------------------------------------------------
void _export InitHook(HWND hDest) // _export est spécifique à BCB
{

CBTHookHandle = SetWindowsHookEx(WH_CBT, // Créer un hook sur le clavier
(HOOKPROC)CBTProc, // Utiliser la fonction KeybdProc
HInst, // Dans la DLL d'instance HInst
0); // Pour tous les threads

}

void _export EndHook()
{


UnhookWindowsHookEx(CBTHookHandle);
}





LRESULT CALLBACK _export CBTProc(int nCode,WPARAM wParam,LPARAM lParam)
{
CHAR szBuf[128];
CHAR szCode[128];



if (nCode < 0) // do not process message
return CallNextHookEx(CBTHookHandle, nCode, wParam,
lParam);



switch (nCode)
{
case HCBT_ACTIVATE:
ShowMessage("HCBT_ACTIVATE");
break;

case HCBT_CLICKSKIPPED:
ShowMessage("HCBT_CLICKSKIPPED");
break;

case HCBT_CREATEWND:

ShowMessage("HCBT_CREATEWND");
break;

case HCBT_DESTROYWND:
ShowMessage("HCBT_DESTROYWND");
break;

case HCBT_KEYSKIPPED:
ShowMessage("HCBT_KEYSKIPPED");
break;

case HCBT_MINMAX:
ShowMessage("HCBT_MINMAX");
break;

case HCBT_MOVESIZE:
ShowMessage("HCBT_MOVESIZE");
break;


case HCBT_QS:
ShowMessage("HCBT_QS");
break;

case HCBT_SETFOCUS:
ShowMessage("HCBT_SETFOCUS");
break;

case HCBT_SYSCOMMAND:
ShowMessage("HCBT_SYSCOMMAND");
break;

default:
ShowMessage("Unknown");
break;
}

return CallNextHookEx(CBTHookHandle, nCode, wParam,
lParam);
}
//---------------------------------------------------------------------------


//END SOURCE
vendredi 23 janvier 2004 à 21:22:16 | Re : Pbm HOOK_CBT

BruNews

Administrateur CodeS-SourceS
HInst = hinst; ne mettre que sur:
case DLL_PROCESS_ATTACH

ShowMessage("HCBT_SYSCOMMAND"); ça fait quoi ? Si tu affiches une fenetre en MessageBox ou un truc de ce genre faut pas chercher plus loin, c'est la boucle infinie.

Tu peux aller voir mes exemples, si je me souviens le limiteur de fenetres IE en version 2 se sert de ce hook.
ciao...
BruNews, Admin CS.
vendredi 23 janvier 2004 à 21:36:38 | Re : Pbm HOOK_CBT

lastpixl

Merci je vais voir ca...

Mais il me semble que ca plantait aussi lorsque jecrivais vers un fichier...

Quand je mets le ShowMessage (=Messagebox, on entend une fois le son et apres processseur utilisé à 100%->boucle infinie).

Merci,
Lastpix'l.


Cette discussion est classée dans : dll, case, break, showmessage, hcbt


Répondre à ce message

Sujets en rapport avec ce message

Mystère DialogBox..... [ par Gendal67 ] Bonjour à tous....Après avoir cherché sur le forum en vain...(j'ai trouvé des problêmes ananlogues mais pas de réponses qui aurait pu m'aider je crois Point d'entrée DLL [ par victorcoasne ] Bonjour, J'ai Dev-C++ et quand je créé une dll la fonction DllMain() n'est pas apellé quand je charge dans un porgramme cette dll ! Voici le code de cosinus,sinus,tangante,ans [ par chinois57 ] quelqu'un peut maider a rajouter (cos, sin, tan, ans) svp ma source est:#include #include #include main(){float x,y;char z; printf("veuillez saisir un menu en c/c++ avec un switch [ par sev622 ] bonjour, voilà, je voudrai faire un menu tout simple avec un switch dans un boucle while...mais j'y arrive pas. Voilà ce que j'ai fait : void main() Génération de nom de fonctions [ par buno ] Bijour les gens!J'ai besoin votre avis sur le "problème" suivant:Dans une fonction, on trouve ce morceau de code:switch (mode){  case 1: Save1bpp(); b switch & case [ par DeadStarXt ] Bonjour,Nous souhaiterions compacter la syntaxe suivante SANS PASSER PAR default :case 'a' : Instructions;break;case 'b' : Instructions;break;case 'c' boucle qui foire?? [ par CCJ ] bonjour. jai fais ce petit bout de code vite fais mé apres une journé tres lourde 8h 18h bah jarrive pu a trouver de solutions .Le bleme : mon code de terminer un processus [ par kyript ] bonjour a tous voila mon probleme quand je ferme mon programme, le processus ne se termine pas voila le code case SC_CLOSE : // cas d'un click sur CASE [ par CHKDSK2K ] Bonjour, j'ai une variable de type char "choix";  je voudrais utiliser cette variable dans un switch mais il ne veut passwitch(choix){    case 'maison Le jeu du serpent en C++ / niveau débutant [ par edouard57 ] Bonjour à tous, Je débute en C ++ et opengl. Pour m'entrainer j'essaie de réaliser un petit jeu le serpent. Pour l'instant j'arrive à créer un carré d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



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

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