Trouver une fenêtre

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 - 22 oct. 2009 à 10:07
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 - 22 oct. 2009 à 16:13
Bonjour,

Je galère un peu pour trouver le handle d'une applet.

J'essaie de faire un peu de ménage dans "EnumWindows", dans la callback je regarde si le hwnd fourni dépend de java.exe

Je me retrouve avec une liste de hwnd. Dans cette liste j'ai entre autre l'icone du systray mais pas le handle de l'applet.
Je vois le handle de l'applet avec Spy++ et il est bien dépendant de java.exe

J'ai peut-être utiliser la mauvaise méthode pour avoir ce handle.

Merci

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
22 oct. 2009 à 15:49
Je n'ai pas de java sur mes posts donc pas moyen de tester.
La hwnd que tu cherches, celle que tu vois avec spy++, n'aurait pas une parent ???
Si oui, faut partir en EnumChildWindows depuis la parent trouvée avec EnumWindows.

ciao...
BruNews, MVP VC++
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
22 oct. 2009 à 16:13
J'ai fait un EnumChildWindows, et ca marche, mais l'achitecte logiciel dit c'est dégueulasse.

J'ai avancé, mais là j'ai un autre souci avec le hook (instancié par IE).
(Je reprends un produit déjà développé par ma boite.)
J'ai un :
const LRESULT sendResult = ::SendMessageTimeout(hwndApplet,
                          MON_ID_DE_MSG,
                          wparam,
                          lparam,
                          SMTO_ABORTIFHUNG | SMTO_BLOCK,
                          5000, // 5 second timeout
                          &responsePtr);

La callback dans IE est :
LRESULT CALLBACK myCallWndProcRetCallback(int nCode, WPARAM wParam, LPARAM lParam) {

    if ( nCode == HC_ACTION && lParam != NULL) {
        const CWPRETSTRUCT* const msg = reinterpret_cast<CWPRETSTRUCT*>(lParam);


        if (msg->message == MON_ID_DE_MSG) {
            // traitement
            POINT point;
            POINTSTOPOINT(point, msg->lParam);
            processMessage(msg->hwnd, msg->wParam, point);
        } 
    }
    return ::CallNextHookEx(g_callWndProcRetHook, nCode, wParam, lParam);
}


Mon pb est que msg->hwnd dans le hwnd de la top-level de IE (IEFrame) et pas hwndApplet.

Ai-je manqué une subtilité sur les hook ?

Merci
0
Rejoignez-nous