Problèmeavec getWindowText

Résolu
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008 - 5 juil. 2006 à 13:59
cs_saifer Messages postés 115 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 19 décembre 2008 - 5 juil. 2006 à 19:57
Salut,
J'utilise un hook avec HCBT_CREATEWND pour détecter la création d'une fenêtre, et plus particulièrement le gestionnaire de tâches.
Je pensais qu'en comparant seulent la classe #32770 je pourrais détecter le gestionnaire, mais le problème c'est qu'il y a d'autres fenêtres qui ont cette même classe.
J'ai donc voulu comparer aussi le titre de la fenêtre avec GetWindowText((HWND)wParam, sTitle, sizeof(sTitle)); mais à chaque fois le sTitle est vide ...
Je l'utilise juste après la détection de la fenêtre donc je pense que le problème est qu'à ce moment là, la fenêtre n'a pas encore de titre.

Voila mon code :

//quand une fenetre est crée
if(nCode == HCBT_CREATEWND)
{   
    GetClassName((HWND)wParam, sClass, sizeof(sClass));
    GetWindowText((HWND)wParam, sTitle, sizeof(sTitle));     

    if ((strcmp(sClass, "#32770")==0)&&(strcmp(sTitle, "Gestionnaire des tâches de Windows")==0))
                    SendMessage(g_handleWnd, WM_ALERTE_CREATE_TASKMANAGER, wParam, 0);          
}

Si vous avez une idée pour mon problème je suis preneur !!!
@+++++

4 réponses

cs_saifer Messages postés 115 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 19 décembre 2008 1
5 juil. 2006 à 15:02
salu!
Je viens de vérifier, tu dois surement utiliser WH_CBT comme type de hook je suppose et en effet ta fonction est exectué avant que le message ne soit traité. Donc je pense que tu devrais plutot utiliser WH_CALLWNDPROCRET comme type de hook, comme ca ta fonction sera executée après la création de ta fenetre et tu pourra récupérer le titre ;)

bonne chance !

-{ Saifer }-
3
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
5 juil. 2006 à 16:04
J'ai essayé comme tu dis mais ça marche toujours pas :

hhk  = SetWindowsHookEx(WH_CALLWNDPROCRET, HookCreateProc, thismod, 0);

LRESULT CALLBACK HookCreateProc(int nCode, WPARAM wParam, LPARAM lParam)
{       
    char sClass[128], sTitle[256];
    CWPRETSTRUCT st;

    if(nCode >= 0)
    {       
        if(nCode == HC_ACTION)
        {   
            st = *(CWPRETSTRUCT*)lParam;
            if (st.message==WM_CREATE)
            {
                GetClassName(st.hwnd, sClass, sizeof(sClass));   
                GetWindowText(st.hwnd, sTitle, sizeof(sTitle));
                if ((strcmp(sClass, "#32770")==0)&&(strcmp(sTitle, "Gestionnaire des tâches de Windows")==0))
                    MessageBox(g_handleWnd, "trouvé", 0, 0);
            }
           
        }     
    }
    return CallNextHookEx(hhk, nCode, wParam, lParam);
}
0
goutbouyo Messages postés 429 Date d'inscription mardi 6 juillet 2004 Statut Membre Dernière intervention 12 janvier 2008
5 juil. 2006 à 16:06
En fait il fallait laisser HCBT_CREATEWND alors que je l'ai remplacé par WM_CREATE ...

Merci pour ton aide !!!!
@+++++++++++
0
cs_saifer Messages postés 115 Date d'inscription samedi 29 mars 2003 Statut Membre Dernière intervention 19 décembre 2008 1
5 juil. 2006 à 19:57
heureux d'avoir pu t'aider !

-{ Saifer }-
0
Rejoignez-nous