Donner le focus à une application externe

Résolu
Le_proprio_de_mykeyes Messages postés 60 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 16 avril 2006 - 16 avril 2006 à 02:19
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre 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

6 réponses

cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 avril 2006 à 11:58
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#
*/
3
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 avril 2006 à 11:55
Salut,

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

/*
coq
MVP Visual C#
*/
0
Le_proprio_de_mykeyes Messages postés 60 Date d'inscription mardi 26 juillet 2005 Statut Membre Dernière intervention 16 avril 2006
16 avril 2006 à 20:07
C'est en plein ça merci à toi Coq
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
16 avril 2006 à 23:05
Coq, à ton avis c'est mieux d'utiliser SetWindowPos ou SetForegroundWindow ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_coq Messages postés 6351 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 100
16 avril 2006 à 23:44
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#
*/
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
17 avril 2006 à 00:52
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. : )
0
Rejoignez-nous