begin process at 2012 05 29 03:42:54
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

System

 > 

GetForegroundWindow() pas fiable ?!


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

GetForegroundWindow() pas fiable ?!

mercredi 9 mars 2011 à 08:00:13 | GetForegroundWindow() pas fiable ?!

ArthurAuguste

Membre Club
Bonjour,
Y a-t-il une autre méthode que : GetForegroundWindow() ou GetActiveWindow() pour connaître depuis une DLL la fenêtre qui est actuellement active sous Windows car je constate que ces deux fonctions ne donnent pas toujours le résultat prévu. En effet, si vous êtes par exemple sous Windows XP avec IE8 comme navigateur, tant que les fenêtres des sites consultés sont stockés en bas de l’écran dans la barre des tâches les deux fonctions donnent le résultat attendu dès que vous activez une de ces fenêtres. Par contre, si les fenêtres consultées n’apparaissent plus dans la barre des tâches parce que IE8 les a prises à son compte et les fait apparaître sous forme d’onglets en haut de l’écran, alors les deux fonctions ne détectent plus les changements quand vous activez une nouvelle fenêtre en passant d’un onglet à l’autre. Il y a même pire les deux fonctions ne détectent pas non plus le changement quand votre précédente fenêtre active était une de celles stockées en bas de l’écran et que vous activez maintenant une fenêtre quelconque de l’onglet !
Quelqu’un connaîtrait-il une méthode infaillible pour déterminer la fenêtre active quel que soit l’endroit où elle est stockée ?
Merci
mercredi 9 mars 2011 à 08:52:11 | Re : GetForegroundWindow() pas fiable ?!

patatalo

Membre Club Administrateur CodeS-SourceS
salut,

C'est plutôt ton raisonnement qui ne fonctionne pas correctement. Les fenêtres retournées par ces fonctions sont les bonnes. Un onglet n'est pas une fenêtre principale mais un contrôle dans la fenêtre principale. Tu peux faire des recherches sur les contrôles enfants avec GetWindow(), GetWindowText(), ...

@++
mercredi 9 mars 2011 à 15:00:20 | Re : GetForegroundWindow() pas fiable ?!

ArthurAuguste

Membre Club
Ok merci, je pensais qu'une fois qu'on avait cliqué sur un onglet la fenêtre changeait puisque le titre n'était plus le même, j'avais d'ailleurs hésité à contrôler aussi le changement de titre, j'aurais dû le faire avant de poser la question. En fait, pour savoir s'il y a un changement finalement je teste maintenant d'abord le changement de fenêtre avec GetForegroundWindow(), s'il n'y a pas de changement de fenêtre je regarde si par hasard il n'y aurait pas quand même un changement de longueur de titre avec Longtitre=GetWindowText(activfen, Titrefen, Titrelong); Je sais bien que normalement j'aurais dû comparer le titre courant avec le précédent mais la probabilité pour deux longueurs de titres différents soient identiques est quand même assez faible et ça m'économise un buffer pour l'ancien titre.
vendredi 11 mars 2011 à 10:14:25 | Re : GetForegroundWindow() pas fiable ?!

patatalo

Membre Club Administrateur CodeS-SourceS
re,

Assez faible mais loin de nul. Il y aura forcement des cas où...

Il y a également un problème si le même onglet change de page. Ton programme croira que mais en fait non.

Tu peux aussi memoriser le handle actif dans la fenêtre et verifier qu'il n'a pas changé. Je pense qu'un GetWindowEx() avec le handle de la fenêtre parent et GW_HWNDFIRST devrait retourné le handle actuellement actif mais a verifier. Les onglets pourraient aussi se retrouver childs d'un autre contrôle et cela pourrait être différent suivant les navigateurs et les mêmes navigateurs mais de version différentes.

@++
vendredi 11 mars 2011 à 15:12:44 | Re : GetForegroundWindow() pas fiable ?!

ArthurAuguste

Membre Club
Salut,
J'avais déjà essayé le GetWindowEx() avec GW_HWNDFIRST et même d'autres GW_ mais ça ne marchait pas. La solution avec GetForegroundWindow() + Longtitre=GetWindowText(activfen, Titrefen, Titrelong); et vérification de la longueur du titre pour l'instant marche à 100%. La probabilité pour que deux longueurs de titre différents soient identiques est faible car pour que ça ne marche pas il faut deux conditions supplémentaires: 1.- que ce soit deux titres de fenêtres présentées en onglets, 2.- qu'ils soient consultés consécutivement. Disons que si le cas se produisait ça ne serait pas très grave et je pourrais si ça devenait gênant comparer les titres eux-mêmes, bien qu'on peut là ausssi imaginer avec une probabilité encore plus faible que deux titres consultés consécutivement sur des onglets soient strictement identiques bien que les fenêtres soient différentes.
Merci


Cette discussion est classée dans : fenêtre, fonctions, active, fenêtres, getforegroundwindow


Répondre à ce message

Sujets en rapport avec ce message

Problème de hook sur fenêtre enfant... [ par platon179 ] Bonjour, j'ai un souci concernant les hooks sur les fenêtres enfant. En fait, ca marche très bien sur les fenêtres parent, mais il semble que la procé Excel et window proc [ par sailline ] Bonjour, Je n'arrive pas à récupérer l'adresse de la window procedure d'une fenetre Excel : j'obtient l'erreur 5 (Access is denied) pourtant Spy++ arr Maîtriser le Z order des fenêtres [ par larion ] Bonjour,Depuis un certain temps je cherche à maîtriser le "Z order" des fenêtres, mais sans succès.Imaginons que l'on a 10 fenêtres portant les titres [WINDOWS C++]problème de fenêtre fille [ par brosse_adan ] Bonjour à tous!Voilà mon problème : je veux avoir une fenêtre principale avec trois fenêtres filles. J'enregistre ma classe de fenêtre principale, mes Récupérer un handle de fenêtre [ par tintin72 ] Bonjour, Je programme une classe 'Splitter' qui a besoin de récupérer le handle des fenêtres filles pour les agencer dans la fenêtre hote. J'ai donc fenêtre arrière plan [ par wanny ] Bonjour.DAns une appli, j'ai une ou plusieurs fenêtre(s) graphique (classe fille de CView).Je clique sur un menu de la mainframe pour changer des para Child Window [ par yerosnimus ] bonjour,Je lis la documentation du site MSDN Library concernant la programmation windows à laquelle je ne connais rien et j'ai un peu de mal à m'en so Gestion des messages windows pour des fenêtres - pointeurs de fonctions [ par neodelphi ] Bonjour tout le monde Je suis en train de faire un programme qui utilise directX et qui doit créer une fenêtre windows. J'ai suivi les exemples que !!! Pb crétation de fenêtre + thread !!! [ par yoyo269 ] Mon problème est que je crée une ou plusieurs fenêtres à l'intérieur d'un thread dont je stocke le handle dans un tableau de static HWND déclaré en gl Effet mosaique et MFC ! [ par flopflopp ] Bonjour, Je travaille sur un projet de fenêtre MFC. La fenêtre principale ouvre 4 fenêtres qui sont des navigateurs internet. Seulement, ces fenêtres


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,858 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales