Fenêtre active de Windows ?
Comment retrouver sous windows et depuis une dll quelconque, le handle de la fenêtre sur laquelle l’utilisateur est en train de travailler ?
J’ai essayé dans l’ordre les fonctions suivantes de l’API32 :
1.- GetActiveWindow()
2.- GetForegroundWindow ()
3.- GetFocus()
4.- GetClipboardOwner()
Seules les deux premières marchent approximativement, c'est-à-dire que si l’utilisateur n’a sur son bureau qu’une seule fenêtre du net, les deux premières fonctions donnent le HWND de la fenêtre sur laquelle il travaille, si l’utilisateur va chercher une autre fenêtre sur le net, il doit au préalable tuer la fenêtre précédente pour que les 2 premières fonctions continuent à donner le HWND de la nouvelle fenêtre.
Par contre, si l’utilisateur a plusieurs fenêtres sur son bureau (j’entends par là des fenêtres qui n’ont aucun lien entre elles), lorsqu’il passe d’une fenêtre à l’autre le HWND fourni par les deux premières fonction ne change pas ! Ou alors c’est que windows rattache la nouvelle fenêtre active au HWND précédent ce qui serait surprenant !
Quelqu’un a-t-il une idée sur la manière de récupérer exhaustivement le HWND de la fenêtre sur laquelle l’utilisateur travaille ?
Merci
Fenêtre active de Windows (suite)
Moi ça marche au début, mais dès qu'on le secoue un peu, ça devient aléatoire. Le secouer c'est à dire passer par tous types de fenêtres comme celle de l'explorateur ou de la fenêtre command de MSDOS ou fenêtres filles etc... Ca n'est pas très fiable!
Fenêtre active (suite et fin)
Bonjour,
Bon j’ai la réponse à mon problème :
En fait lorsque que je dis que les fenêtres sont parfois présentées par IE8 en haut de l’écran sous forme d’onglets j’ai à moitié tort, car dans ce cas là la fenêtre IE8 est commune pour tous les onglets, chaque onglet n’est pas une fenêtre à part entière mais un contrôle dans la fenêtre commune ce qui explique pourquoi GetForegroundWindow() ne voit pas la différence. On remarquera cependant que lorsqu’on clique sur un des onglets le titre de la fenêtre commune change. Donc, pour savoir si l’utilisateur a changé de fenêtre, le test sur le changement de HWND ne suffit pas, dans le cas où le HWND n’a pas changé il faut aller voir en plus si par exemple le titre n’aurait pas, lui, changé en utilisant par exemple : Longtitre=GetWindowText(activfen, Titrefen, Titrelong);