Savoir quelle application à le focus [Résolu]

oximoron 149 Messages postés mercredi 23 juillet 2003Date d'inscription 30 janvier 2009 Dernière intervention - 24 avril 2008 à 12:01 - Dernière réponse : cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

13 réponses

Meilleure réponse
sebmafate 4947 Messages postés lundi 17 février 2003Date d'inscription 14 février 2014 Dernière intervention - 24 avril 2008 à 14:42
3
Merci
du JavaScript ???

non non... c'est du C#...
Bref... sinon, tu peux utiliser l'api GetForegroundWindow

[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]

Merci sebmafate 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de sebmafate
Meilleure réponse
oximoron 149 Messages postés mercredi 23 juillet 2003Date d'inscription 30 janvier 2009 Dernière intervention - 28 avril 2008 à 22:46
3
Merci
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  ;)

Merci oximoron 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de oximoron
Cipoli 53 Messages postés mercredi 29 août 2007Date d'inscription 31 mars 2010 Dernière intervention - 24 avril 2008 à 14:17
0
Merci
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 :

[DllImport
(

"user32.dll"
)]

public
static
extern
IntPtr
FindWindow(

string
lpClassName,
string
lpWindowName);

IntPtr
hWnd = FindWindow( null , title);
if (hWnd != IntPtr .Zero)
Commenter la réponse de Cipoli
Liverion 296 Messages postés mardi 22 avril 2008Date d'inscription 18 août 2008 Dernière intervention - 24 avril 2008 à 14:17
Commenter la réponse de Liverion
oximoron 149 Messages postés mercredi 23 juillet 2003Date d'inscription 30 janvier 2009 Dernière intervention - 24 avril 2008 à 14:35
0
Merci
@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...




Merci tout de même à tous les deux.http://www.csharpfr.com/infomsg_SAVOIR-QUELLE-APPLICATION-FOCUS_1119645.aspx


/SPAN>
Commenter la réponse de oximoron
Liverion 296 Messages postés mardi 22 avril 2008Date d'inscription 18 août 2008 Dernière intervention - 24 avril 2008 à 14:41
0
Merci
Au temps pour moi, j'ai fait une recherche MSDN en précisant C# sous VS2005 mais il a pas l'air de toujours le prendre en compte ^^

Sinon si tu peux recuperer une liste de tes objets et faire une boucle avec la fonction bool System.Windows.Forms.Control.Focus()

qui renvoi si ton Control a le focus ou non
Commenter la réponse de Liverion
Cipoli 53 Messages postés mercredi 29 août 2007Date d'inscription 31 mars 2010 Dernière intervention - 24 avril 2008 à 14:48
0
Merci
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.
Commenter la réponse de Cipoli
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 24 avril 2008 à 15:54
0
Merci
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.
Commenter la réponse de Lutinore
oximoron 149 Messages postés mercredi 23 juillet 2003Date d'inscription 30 janvier 2009 Dernière intervention - 24 avril 2008 à 16:17
0
Merci
Merci à tous pour votre aide, je vais essayer ca.
Commenter la réponse de oximoron
oximoron 149 Messages postés mercredi 23 juillet 2003Date d'inscription 30 janvier 2009 Dernière intervention - 24 avril 2008 à 22:11
0
Merci
Je confirme ca marche super bien, voici le bout de code :

using
System.Runtime.InteropServices;

using System.Diagnostics;

[DllImport(
"user32.dll")]

static
extern
IntPtr GetForegroundWindow();

private

string DonneTitreFenetreActive()
{
   
IntPtr lHandleFenetreActive = GetForegroundWindow();
   
Process[] lListeProcessus =
Process.GetProcesses();
   
foreach (
Process loProcessus
in lListeProcessus)
       
if (loProcessus.MainWindowHandle == lHandleFenetreActive)
           
return loProcessus.MainWindowTitle;

    return
"";
}

Merci pour votre aide.
Commenter la réponse de oximoron
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 26 avril 2008 à 23:53
0
Merci
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.

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq
oximoron 149 Messages postés mercredi 23 juillet 2003Date d'inscription 30 janvier 2009 Dernière intervention - 29 avril 2008 à 13:20
0
Merci
Je me suis trompé de lien ca c'est le lien vers ndoc... voci le bon : http://mwinapi.sourceforge.net
Commenter la réponse de oximoron
cs_coq 6366 Messages postés samedi 1 juin 2002Date d'inscription 2 août 2014 Dernière intervention - 30 avril 2008 à 23:39
0
Merci
Qui repose que GetWindowText, ça me rassure :-)

/*
coq
MVP Visual C#
CoqBlog
*/
Commenter la réponse de cs_coq

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.