bonapart002
Messages postés45Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention 9 février 2011
-
15 mars 2009 à 14:20
bonapart002
Messages postés45Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention 9 février 2011
-
24 mars 2009 à 02:03
Bonsoir :
le code de dll suivant permet de détecter le le création ,réduction ou un agrandissement d'une fenêtre :
----------------------------
#include <windows.h>
HINSTANCE thismod;
HHOOK hhk;
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{
if(dwReason == DLL_PROCESS_ATTACH)
thismod = hDll;
return 1;
}
LRESULT CALLBACK CbtHookCallback(int nCode, WPARAM wParam, LPARAM lParam) {
if(nCode >= 0)
{
//quand une nouvelle fenetre est créé
if(nCode == HCBT_CREATEWND)
MessageBox(NULL, "Fenêtre Créée", "Information", MB_ICONINFORMATION);
//pour quand on faire une reduction ou un agrandissement
if(nCode == HCBT_MINMAX)
MessageBox(NULL, "Fenêtre Réduction / Agrandissement", "Information", MB_ICONINFORMATION);
si j'exécute le programme client qui utilise cette dll .il m'affiche en boucle infinie le MessageBox "fenetre créée" .
si j'elimine cette partie (detection de creation de fenetre ):
if(nCode == HCBT_CREATEWND)
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 15 mars 2009 à 22:01
ben suffit de tester le nom de la fenêtre, par exemple :
if(nCode==HCBT_CREATEWND)
{
CHAR szwName[12];
GetWindowText((HWND)wParam,szName,12);
if(!StrCmp(szName,"Information"))
{
MessageBox(0,"Fermeture","Information",0);
...
}
}
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 15 mars 2009 à 18:04
Et bien lorsque tu affiches ton message "Fenêtre créée", une nouvelle fenêtre est créée (celle de la MsgBox), donc émission d'un deuxième message HCBT_CREATEWND, et ainsi de suite...
bonapart002
Messages postés45Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention 9 février 2011 15 mars 2009 à 20:05
salut:
ok merci .
mais je doit connaitre le nom de l'application ou de la nouvelle fenêtre qui s'affichera .par exemple si la fenêtre qui apparaitre est la fenêtre de Word
j' interdire son ouverture et afficher un MessageBox ("vous ne pouvez pas ouvrir cette fenetre ").
bonapart002
Messages postés45Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention 9 février 2011 16 mars 2009 à 01:31
mais désolé ce code ça marche avec le HCBT_MINMAX
et HCBT_DESTROYWND et d'autre..mais ne ce marche pas avecHCBT_CREATEWND.
je pense car avant la création de fenêtre on ne peut pas tester sur son nom
(szName) le nom de fenêtre est vide avant sa création .
mon problème est :je veut afficher un MessageBox seulement si j'ouvre un fenêtre qui ayant comme nom "MonFenetre" dans les autre cas rien ne s'affichera .
je mit le code suivant:
bonapart002
Messages postés45Date d'inscriptionmercredi 17 décembre 2008StatutMembreDernière intervention 9 février 2011 16 mars 2009 à 17:12
mais ça m'affiche 3 erreur :
-error C2227: la partie gauche de '->lpcs' doit pointer vers un type class/struct/union/générique
-error C2227: la partie gauche de '->lpszName' doit pointer vers un type class/struct/union/générique
-warning C4311: 'cast de type' : troncation de pointeur de 'HHOOK' à 'int'
j 'ai essayé de les corriger mais non, toujours les mêmes erreurs .
voici le code de la dll :
---------------------------------------
#include <windows.h>
#include <string.h>
HINSTANCE thismod;
HHOOK hhk;
BOOL WINAPI DllMain(HINSTANCE hDll, DWORD dwReason, LPVOID Reserved)
{