Extraits de code:Trouver les gestionnaires de fenêtres
Un article de MDC.
Lorsque vous travaillez sur des plates-formes Windows, la plupart des APIs et framework ont besoin d'un gestionnaire de fenêtre (type HWND). Puisque Mozilla essaye d'être multi plates-formes, il peut être difficile d'obtenir le gestionnaire dont vous avez besoin.
Voici un exemple simple de code pour obtenir des gestionnaires de fenêtres de Mozilla. Ce code peut être utilisé depuis une application externe ou depuis un composant XPCOM dans une extension.
[modifier] Trouver le gestionnaire de fenêtres
HWND hContent = 0;
// Tout d'abord, nous essayons de trouver la fenêtre principale du navigateur
HWND hFF = ::FindWindowEx(0, 0, "MozillaUIWindowClass", 0);
if (hFF) {
// Ensuite, nous descendons à travers une structure fixée
HWND hTemp;
hTemp = ::FindWindowEx(hFF, 0, "MozillaWindowClass", 0);
hTemp = ::FindWindowEx(hTemp, 0, "MozillaWindowClass", 0);
// Nous supposons avoir ici 1 fenêtre avec des enfants
// et que celle avec des enfants est celle cherchée
HWND hChild = ::GetWindow(hTemp, GW_CHILD);
while (hTemp && !hChild) {
hTemp = ::GetWindow(hTemp, GW_HWNDNEXT);
hChild = ::GetWindow(hTemp, GW_CHILD);
}
// Avons nous trouvé une fenêtre avec des enfants ?
// Cet enfant est heureusement la fenêtre de contenu
if (hTemp) {
hTemp = ::GetWindow(hTemp, GW_CHILD);
hContent = ::FindWindowEx(hTemp, 0, "MozillaContentWindowClass", 0);
}
}
// À ce stade, hContent est soit NULL, soit le HWND de la fenêtre de contenu