Donner le focus à une application externe [Résolu]

Messages postés
60
Date d'inscription
mardi 26 juillet 2005
Statut
Membre
Dernière intervention
16 avril 2006
- - Dernière réponse : Lutinore
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
- 17 avril 2006 à 00:52
Je m'explique: j'ai mon application principale "Windows Controller" qui fait Process.Start("FCSCtrl.exe") et qui stocke le Process dans fcsConsoleProcess. (FCS = Fast Console Script"). Je voudrais, lorsqu'on clique sur le menu, que ca focus sur la fenêtre de la console FCS. je sais qu'on peut utiliser HasExited pour vérifier mais je ne trouve pas comment donner le focus à cette fenêtre . Est-ce que qqun peut m'aider? Merci d'avance
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
3
Merci
Exemple :
NativeMethods.SetWindowPos(
new HandleRef(this.fcsConsoleProcess, this.fcsConsoleProcess.MainWindowHandle),
NativeMethods.HWND_TOP,
0,
0,
0,
0,
NativeMethods.SWP_NOMOVE | NativeMethods.SWP_NOSIZE
);

Avec la classe NativeMethods définie comme ceci :
------
using System;
using System.Runtime.InteropServices;


internal class NativeMethods
{
private NativeMethods()
{
}


static NativeMethods()
{
NativeMethods.HWND_TOP = new HandleRef(null, IntPtr.Zero);
}


public static readonly HandleRef HWND_TOP;


public const int SWP_NOSIZE = 0x0001;
public const int SWP_NOMOVE = 0x0002;


[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern bool SetWindowPos(
HandleRef hWnd,
HandleRef hWndInsertAfter,
int X,
int Y,
int cx,
int cy,
int uFlags
);
}
------

/*
coq
MVP Visual C#
*/

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 200 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_coq
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
0
Merci
Salut,

Avec la méthode SetWindowPos de l'API Win.

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
60
Date d'inscription
mardi 26 juillet 2005
Statut
Membre
Dernière intervention
16 avril 2006
0
Merci
C'est en plein ça merci à toi Coq
Commenter la réponse de Le_proprio_de_mykeyes
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
0
Merci
Coq, à ton avis c'est mieux d'utiliser SetWindowPos ou SetForegroundWindow ?
Commenter la réponse de Lutinore
Messages postés
6352
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
75
0
Merci
En fait je ne sais pas trop quoi penser sur ce coup là.
La seule différence notable à laquelle je pense est la différence de comportement si l'application à auparavant utiliser LockSetForegroundWindow : avec SetWindowPos, la fenêtre passera au dessus sans prendre le focus, alors qu'avec SetForegroundWindow elle se contentera de "clignoter" en barre des tâches sans changer de z-order.
Mais je ne suis pas complètement au point côté API Win, j'ai probablement rater d'autre subtilités (priorités d'accès aux ressources, etc etc)

Donc j'aurais tendance a privilégier SetWindowPos, juste parce que j'oublie toujours l'existence de SetForegroundWindow :p

/*
coq
MVP Visual C#
*/
Commenter la réponse de cs_coq
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
29
0
Merci
Je me suis demandé quel était l'avantage de l'une de ces fonctions par rapport à l'autre sans vraiment trouver.. Je te remercie de ta réponse. : )
Commenter la réponse de Lutinore