Problèmeavec getWindowText

[Résolu]
Signaler
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008
-
Messages postés
115
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2008
-
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 !!!
@+++++
A voir également:

4 réponses

Messages postés
115
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2008
1
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 }-
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

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);
}
Messages postés
429
Date d'inscription
mardi 6 juillet 2004
Statut
Membre
Dernière intervention
12 janvier 2008

En fait il fallait laisser HCBT_CREATEWND alors que je l'ai remplacé par WM_CREATE ...

Merci pour ton aide !!!!
@+++++++++++
Messages postés
115
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
19 décembre 2008
1
heureux d'avoir pu t'aider !

-{ Saifer }-