Affichage contenue de MessageBox

Résolu
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 9 février 2011 - 15 mars 2009 à 14:20
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Derniè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);
  
  }

  return CallNextHookEx(hhk, nCode, wParam, lParam);
}

extern "C" __declspec(dllexport) int __stdcall Intercepte()
{  if(!hhk) hhk  = SetWindowsHookEx(WH_CBT, CbtHookCallback, thismod, 0); return (int) hhk; }

extern "C" __declspec(dllexport) void __stdcall FinIntercepte()
{   if(hhk)   { UnhookWindowsHookEx(hhk);   hhk = 0; } }

-----------------------------

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)

      MessageBox(NULL, "Fenêtre Créée", "Information", MB_ICONINFORMATION);

il ca marche bien .

quel est l'erreur dans ce code ?
et merci

11 réponses

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
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);
      ...
   }
}

ça devrait marcher.
3
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
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...
0
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Derniè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 ").

j'attends ta réponse et merci bcp pour ton aide .
0
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 9 février 2011
15 mars 2009 à 23:35
merci bcp juju c ça que je recherche .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
16 mars 2009 à 01:17
sauf que je me suis planté, avecStrCmp de shlwapi ça serait plutôt :
if(StrCmp(szName,"Information"))...
0
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Derniè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 avec  HCBT_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:

if(nCode==HCBT_CREATEWND)
{
   CHAR szName[12];
   GetWindowText((HWND)wParam,szName,12);
   if(strcmp(szName,"MonFenetre")) 
   {
     MessageBox(0,"ouvrir monfenetre ","Ouverture",0);
    
   }
else
{// rien à fire
 }

}

mais il m'affiche ce MessageBox  dans tout les cas .
ou est-elle  le probleme?
et merci juju  pour ton aide .


0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
16 mars 2009 à 13:01
au temps pour moi...
par contre ceci devrait aller :

if(nCode==HCBT_CREATEWND)
{
   LPCTSTR lpName=((CBT_CREATEWND)lParam)->lpcs->lpszName;
   if(StrCmp(lpName,"Ma fenêtre") {...}
}
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
16 mars 2009 à 13:02
avec le nombre correct de () c'est mieux...
if(StrCmp(lpName,"Ma fenêtre")) {...}
0
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Derniè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)
{

  if(dwReason == DLL_PROCESS_ATTACH)
      thismod = hDll;
  return 1;
}

LRESULT CALLBACK CbtHookCallback(int nCode, WPARAM wParam, LPARAM lParam) {
  if(nCode >= 0)
  {

f(nCode==HCBT_CREATEWND)
{
   LPCTSTR lpName=((CBT_CREATEWND)lParam)->lpcs->lpszName;
   if(strcmp(lpName,"Ma fenêtre"))
{MessageBox(0,"ouvrir monfenetre ","Ouverture",0);}
 else {// rien a faire }
}

return CallNextHookEx(hhk, nCode, wParam, lParam);
}

extern "C" __declspec(dllexport) int __stdcall Intercepte()
{
  if(!hhk)
      hhk  = SetWindowsHookEx(WH_CBT, CbtHookCallback, thismod, 0);

  return (int) hhk;
}

extern "C" __declspec(dllexport) void __stdcall FinIntercepte()
{
  if(hhk)
  {
      UnhookWindowsHookEx(hhk);
      hhk = 0;
  }
}

----------------------------------
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
16 mars 2009 à 19:48
oulà j'ai du mal en ce moment...
LPCTSTR lpName=((CBT_CREATEWND*)lParam)->lpcs->lpszName;

et comme ça, ça passe?
0
bonapart002 Messages postés 45 Date d'inscription mercredi 17 décembre 2008 Statut Membre Dernière intervention 9 février 2011
24 mars 2009 à 02:03
dsl mais encore il y'a un probleme .
si je met ce code
if

(nCode= =HCBT_CREATEWND)
{
LPCTSTR lpName=((CBT_CREATEWND*)lParam)->lpcs->lpszName;

if
( strcmp(lpName,
"mafenetre"
) == 0 )

MessageBox(NULL, "nom"
,
"nom"
, MB_ICONINFORMATION);
}

l'explorer.exe   s'arrete .et rien ne s'affiche .
0
Rejoignez-nous