Trouver une fenêtre

fregolo52
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
- 22 oct. 2009 à 10:07
fregolo52
Messages postés
1115
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
21041
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
26
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
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
3
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