oximoron
Messages postés149Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention30 janvier 2009
-
24 avril 2008 à 12:01
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014
-
30 avril 2008 à 23:39
Voila j'aimerai savoir comment faire pour récupérer le nom du processus ou le titre la fenêtre ou encore le pid qui à actuellement le focus.
J'aimerai savoir quelle est l'application qui est en train d'être utilisé. Je pense que la soution est dans les api windows, mais je ne sais pas trop comment chercher ni où...
Merci d'avance.
oximoron
Messages postés149Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention30 janvier 2009 28 avril 2008 à 22:46
Désolé, j'avais pas vu ta réponse coq.
Bien vu j'ai effectivement des petits problèmes de
rapidités
avec ma boucle de process. Rien de bien dramatique, mais tout de même 1/2 seconde ... Dans un 1er temps j'ai créer un dico avec le HWnd dans la clé. Ca allait un peu mieux mais c'était "
loProcessus.MainWindowHandle" qui prenait 95% du temps.
J'ai fait un système de cache pour ne rafrachir la liste toutes les 15 secondes au lieux de toutes les secondes.
Et puis j'ai trouvé ManagedWinapi sur http://ndoc.sourceforge.net/ Du coup mon code se résume à ca :
SystemWindow.ForegroundWindow.Title;
et pour avoir le titre du parent
SystemWindow.ForegroundWindow.Parent.Title;
Au niveau des perfs, rien a voir, pour faire plus de chose (récupération du Title, du
Parent
.Title et du Parent.Parent.
Title
(sur 3 niveau)) ca prend plus que 0.0020 secondes au lieu des 0.5s.
Ah oui et j'ai un peu galéré car la fenêtre active change de HWnd
si par exemple c'est la fenêtre des options, de recherche... il faut donc avoir le parent.
Voilà mon soucis est réglé. Merci à vous tous. J'ai plus qu'a régler celui avec vista et visual 2008, "Task failed because "sgen.exe" was not found..." que je puisse continuer ;)
Cipoli
Messages postés53Date d'inscriptionmercredi 29 août 2007StatutMembreDernière intervention31 mars 2010 24 avril 2008 à 14:17
Salut oximoron,
voici une fonction api qui permet de te donner le hande d'une fêntre, si tu connais le titre de la fenêtre de ton programme.
Je sais pas vraiment si ça peut d'aider alors dans le doute voilà le code :
oximoron
Messages postés149Date d'inscriptionmercredi 23 juillet 2003StatutMembreDernière intervention30 janvier 2009 24 avril 2008 à 14:35
@Liverion: merci mais ce que tu me donne c'est du javascript ...
@Cipoli: C'est un bon début, mais ca ne m'indique pas si la fenêtre à le focus, et je connais pas le nom exact de la fenêtre...
Cipoli
Messages postés53Date d'inscriptionmercredi 29 août 2007StatutMembreDernière intervention31 mars 2010 24 avril 2008 à 14:48
Voici ton bonheur :
Fonction GetActiveWindow
Declare Function GetActiveWindow Lib "user32" ()
As Long
Description : Cette fonction retourne un pointeur vers la fenêtre active.
Si la fenêtre n'est pas attachée au processus cournat, la fonction retourne 0.
Lutinore
Messages postés3245Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 24 avril 2008 à 15:54
Salut, GetActiveWindow se limite au thread de l'application, c'est la même chose que la propriète ActiveForm du framework c'est bien pour ça que Seb propose GetForegroundWindow.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 26 avril 2008 à 23:53
Salut,
Si ton intention est de récupérer le titre de la fenêtre ayant le focus, tu devrais plutôt regarder du côté de GetWindowText & co
Si le but est de récupérer le titre de la fenêtre principale du processus auquel appartient la fenêtre ayant le focus, tu devrais t'orienter vers GetWindowThreadProcessId pour obtenir l'ID du processus et t'en servir avec Process.GetProcessById : ça devrait être plus performant que la boucle sur la liste de Process.