begin process at 2012 05 29 09:00:42
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Hook dans Dll


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

Hook dans Dll

mardi 18 mai 2004 à 14:54:36 | Hook dans Dll

larion

Bonjour,

Mon problème est pourtant simple, mais impossible de m'en sortir sans votre aide.

J'ai ajouté des éléments dans les menus système de cette manière :
#define IDM_ABOUT 100
HMENU hSysMenu = GetSystemMenu(handle,FALSE);
AppendMenu(hSysMenu,MF_STRING,(UINT)IDM_ABOUT,"Déplacer vers [1]"); // Ajout du menu

Et je désire détecter un click sur "Déplacer vers [1]" par un Beep par exemple, dans une Dll.
Après une multitude d'essai, j'ignore completement ce qui faut mettre à la place de ???
#define IDM_ABOUT 100
LRESULT CALLBACK _export MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{ MSG msg;
PCWPSTRUCT pCwp;

pCwp = (PCWPSTRUCT)lParam;
msg.message = pCwp->message;
msg.lParam = pCwp->lParam;
msg.wParam = pCwp->wParam;
msg.hwnd = pCwp->hwnd;

switch(msg.message)
{ case WM_SYSCOMMAND:
switch ( ??? )
{ case IDM_ABOUT:
MessageBeep(MB_OK);
break;
}
break;
}
return CallNextHookEx(NULL,nCode,wParam,lParam);
}
mardi 18 mai 2004 à 19:15:10 | Re : Hook dans Dll

ymca2003

je ne crois pas qu'un hook souris intercepte le message WM_SYSCOMMAND

il faut surement créer un hook sur les messages (WH_GETMESSAGE par ex)
mardi 18 mai 2004 à 19:29:56 | Re : Hook dans Dll

larion

J'ai créer le Hook de cette manière :
SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)MouseProc,HInst,0);

J'ai fait une interception sur WM_SIZE (changement de taille d'une fenêtre) et cela fonctionne.

Je n'ai pas fait attention, mais il est vrai que je devrai utiliser
CallWndProc.
Je vais donc refaire mes testes...
mardi 18 mai 2004 à 20:06:16 | Re : Hook dans Dll

larion

J'ai même intercepté un Close d'un fenêtre de cette manière :

switch(msg.message)
{ case WM_SYSCOMMAND:
switch (msg.wParam)
{ case SC_CLOSE:
MessageBeep(MB_OK);
break;
}
break;
}

Bon, cela fait une semaine que je suis dessus. Je vais faire une petite pause.
J'y comprends rien à ces hooks : je dis cela parce que je suis énervé ;-)

mardi 18 mai 2004 à 21:11:19 | Re : Hook dans Dll

ymca2003

je ne sais pas si c'est çs ton pb, mais en MFC Dialog Based, pour ajouter une commande dans le menu système, l'Id doit avoir certaines conditions :
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

avec
#define IDM_ABOUTBOX 0x0010 ces assertions sont vraies
mardi 18 mai 2004 à 21:46:34 | Re : Hook dans Dll

larion

Je n'ai pas de problème sur l'ajout d'un menu.

Je me suis inspiré de http://www.cppfrance.com/code.aspx?ID=9684

Mon problème est sur la détection d'un click sur ce menu par un hook global dans une dll.
mercredi 19 mai 2004 à 13:37:21 | Re : Hook dans Dll

larion

J'arrive à dectecter la selection (et non le click) sur un item d'un menu system

Reprennons :
J'ai ajouté des éléments dans les menus système de cette manière :
#define IDM_ABOUT 100
HMENU hSysMenu = GetSystemMenu(handle,FALSE);
AppendMenu(hSysMenu,MF_STRING,(UINT)IDM_ABOUT,"Déplacer vers [1]"); // Ajout du menu

J'ai créer le Hook de cette manière :
SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,HInst,0);

La détection par :
switch(msg.message)
{ case WM_MENUSELECT :
switch(LOWORD(msg.wParam))
{ case IDM_ABOUT:
MessageBeep(MB_OK);
break;
}
break;
}

Et là, j'ai un beep lorsque ma souris passe sur ,"Déplacer vers [1]" du menu systeme.
Ce que je souhaite, c'est un beep lorsque l'on clique sur "Déplacer vers [1]".
En principe il faut remplacer WM_MENUSELECT par WM_SYSCOMMAND.
Rien n'y fait, pire WM_SYSCOMMAND n'est même pas détecté.
Et pourtant, il est écrit dans la doc API Win32:
"The menu items in a System menu can be modified by using the GetSystemMenu, AppendMenu, InsertMenu, ModifyMenu, InsertMenuItem, and SetMenuItem functions. Applications that modify the System menu must process WM_SYSCOMMAND messages."
Je ne vois pas ou se trouve le problème ????
mercredi 19 mai 2004 à 16:24:32 | Re : Hook dans Dll

ymca2003

Installe un Hook WH_GETMESSAGE
mercredi 19 mai 2004 à 17:36:14 | Re : Hook dans Dll

larion

J'ai remplacé
SetWindowsHookEx(WH_CALLWNDPROC,(HOOKPROC)CallWndProc,HInst,0);
par
SetWindowsHookEx(WH_GETMESSAGE,(HOOKPROC)GetMsgProc,HInst,0);
Rien n'y fait, WM_SYSCOMMAND n'est même pas détecté.
mercredi 19 mai 2004 à 23:26:37 | Re : Hook dans Dll

ymca2003

c'est bizarre, j'ai fait un test et ça marche. Si t'as un mail à filer je te donnerai mon test.

1 2

Cette discussion est classée dans : msg, wparam, lparam, idm, pcwp


Répondre à ce message

Sujets en rapport avec ce message

problème CreateDialog et afficher icone [ par Suisse00 ] J'ai un petit problème avec CreateDialog, il y a aucun fenêtre qui s'ouvre (VC++ 6)#include #include "resource.h"HWND hDlg;LRESULT Comment sortir d'une boucle avec clic sur un bouton Cancel? [ par rolanddegilead1 ] Bonjour,je suis debutant et je m'arrache les cheveux depuis presque une semaine a cause d'un truc tout bete: en gros je cree une fenetre avec 2 bouton 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 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 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 Créer sa classe OpenGL [problème pointeur de fonction membre] [ par Mickatronic ] Bonjour, je réalise un projet tutauré en C++, dans ce projet je dois créer une classe qui va me permettre de généré la fenêtre OpenGl. Comme je savais 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 Problème sous-classement [ par Albanderuaz ] Bonjour !J'ai un petit problème avec ce code qui est censé, grâce à un sous-classement, modifier le texte de tous les boutons grâce à un hook global. Combox me bloquant l'appli [ par SnOOpss ] Bonjour j'ai essayé de simplifier au maximum mon code mais meme codé comme cela j'ai le meme probleme. Tant que je clique par sur le comboBox tout est


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

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