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

Messages postés
60
Date d'inscription
mardi 26 juillet 2005
Dernière intervention
16 avril 2006
- 16 avril 2006 à 02:19 - Dernière réponse :
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
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 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 16 avril 2006 à 11:58
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#
*/

Merci cs_coq 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de cs_coq
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 16 avril 2006 à 11:55
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
Dernière intervention
16 avril 2006
- 16 avril 2006 à 20:07
0
Merci
C'est en plein ça merci à toi Coq
Commenter la réponse de Le_proprio_de_mykeyes
Messages postés
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 16 avril 2006 à 23:05
0
Merci
Coq, à ton avis c'est mieux d'utiliser SetWindowPos ou SetForegroundWindow ?
Commenter la réponse de Lutinore
Messages postés
6366
Date d'inscription
samedi 1 juin 2002
Dernière intervention
2 août 2014
- 16 avril 2006 à 23:44
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
3248
Date d'inscription
lundi 25 avril 2005
Dernière intervention
27 octobre 2012
- 17 avril 2006 à 00:52
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

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.