Lustuc
Messages postés30Date d'inscriptionlundi 18 août 2008StatutMembreDernière intervention20 octobre 2009
-
20 août 2008 à 22:25
Lustuc
Messages postés30Date d'inscriptionlundi 18 août 2008StatutMembreDernière intervention20 octobre 2009
-
22 août 2008 à 12:29
Bonjour,
Ma question est sans doute un peu bête, mais je nage un peu avec les handle.
J'ai une application qui ouvre plusieurs fenêtres, je voudrais pouvoir avoir le handle spécifique de l'une d'entre elle, or elles ont toute le même...
J'ai cru comprendre qui y a la notion de parent au niveau des handle. En gros je cherche à voir celui d'un des enfants
Si il y avait une bonne âme pour me montrer la lumière dans ce monde obscure des handle ça serait bien sympa...
Lustuc
Messages postés30Date d'inscriptionlundi 18 août 2008StatutMembreDernière intervention20 octobre 2009 22 août 2008 à 12:29
ça a marché ! ! ! avec EnumWindows.
Voici le code qui m'a permi d'afficher tous les handle avec les titres des fenêtres.
Les fenêtres qui apparaissaient avec le même handle avec la fonction FindWindow, ont ici des handle bien distincts:
La fonction :<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 21 août 2008 à 00:43
plusieurs fenêtres ne peuvent pas avoir le même hwnd, à moins que ton application dessine elle-même les fenêtres sur un fond commun, mais dans ce cas on n'est plus vraiment dans le contexte des fenêtres de l'API. Est-ce le cas?
Sinon comment récupères-tu tes handle? Je veux dire, quel code emploies-tu (avec quels résultats) pour pouvoir dire que les fenêtres ont le même hwnd?
Les fonctions utiles pour trouver les fenêtres enfants sont par exemple EnumChildWindows(), ou FindWindowEx()...
Lustuc
Messages postés30Date d'inscriptionlundi 18 août 2008StatutMembreDernière intervention20 octobre 2009 21 août 2008 à 01:40
Le code est le suivant :
char caption[255];
Sleep(5000); // j'ai 5 seconde pour passer la première fenêtre en active
GetWindowText(GetForegroundWindow(),caption,255);
printf("le titre est: %s\n", caption);
HANDLE HWND1 = FindWindow(NULL,caption);
printf("le handle de la fenetre 1 est : %X\n\n", HWND1);
Sleep(5000); // j'ai 5 seconde pour passer la deuxième fenêtre en active
GetWindowText(GetForegroundWindow(),caption,255);
printf("le titre est: %s\n", caption);
HANDLE HWND2 = FindWindow(NULL,caption);
printf("le handle de la fenetre 2 est : %X\n\n", HWND2);
En résultat, il m'affiche le titre de la 1ère fenêtre avec "1008A" pour Handle
puis le titre de la seconde fenêtre avec toujours "1008A" pour Handle
L'appli génère des fenêtres, mais ces dernières ne sont pas identiques et n'ont pas la même fonction, notamment la fenêtre parent et les fenêtres enfants.
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 21 août 2008 à 09:20
Si tu maitrises tout, c'est a dire que tu accès au code source des fenetres que tu ouvres, tu devrais passer en mode debug et regarder à qui appartient ce handle.
Si pour chaque fenetre tu as fait un CreateWindow, elles devraient toutes avoir des handles différents.
Sinon as-tu testé le retour de GetForegroundWindow() ? Pour voir si c'est les mêmes que la fonction FindWindow.
Vous n’avez pas trouvé la réponse que vous recherchez ?
fregolo52
Messages postés1114Date d'inscriptionmercredi 15 juin 2011StatutMembreDernière intervention 6 mai 20214 21 août 2008 à 13:17
GetForegroundWindow() tu retournes le handle (hwnd) de la fenetre active de Windows (je crois).
J'aime pas trop FindWindow.
Essaie EnumWindows.
Voici mon code avec EmunChildWindows (que tu adapteras pour EnumWindows et tes besoins) qui change les libelles des controles de la fenetre dans la langue désirée :
static BOOL CALLBACK EnumControlsForLanguage(
HWND hwnd, // handle to child window
LPARAM lParam // application-defined value
)
{
CString cs;
int id = GetDlgCtrlID(hwnd);
cs.LoadString(id);
SetWindowText(hwnd, cs);