Focus et Forms

Résolu
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009 - 27 sept. 2006 à 09:56
gtrusz Messages postés 2 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 6 octobre 2007 - 6 oct. 2007 à 14:27
Salut,
voila le pb, j'ai plusieurs fenetres ouvertes, je voudrais savoir comment determiner laquelle a le focus et qu'il s'agisse de celle qui est en premiere vu de lutilisateur?
Pouvez-vous m'aidez?

13 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
10 oct. 2006 à 15:40
Voila un code tout simple, le titre de la fenêtre active ( si elle a un titre ) s'affiche dans la barre de titre de l'application, Pour que le test soit efficace il faut bien sûr que tu donne le focus à une autre application. Tu n'auras pas le titre pour les fenêtres de l'explorateur mais peu importe c'est juste un exemple "tout bête" pour te montrer comment utiliser le handle d'une fenêtre.

public partial class Form1 : Form
{
    #region Win32


    [ System.Runtime.InteropServices.DllImport( "user32.dll" ) ]
    private static extern IntPtr GetForegroundWindow( );


    #endregion // Win32


    private Timer t = null;


    public Form1( )
    {
        InitializeComponent( );


        t = new Timer( );
        t.Interval = 500;
        t.Tick += delegate
        {
            string caption = "???";
            IntPtr handle = GetForegroundWindow( );


            if ( handle == this.Handle )
            {
                caption = "Mon application à le focus.";
            }
            else if ( handle != IntPtr.Zero )
            {
                foreach ( Process p in Process.GetProcesses( ) )
                {
                    if ( p.MainWindowHandle == handle )
                    {
                        caption = p.MainWindowTitle;
                        break;
                    }
                }
            }


            this.Text = caption;
        };
        t.Start( );
    }
}
3
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
27 sept. 2006 à 10:02
PS: Je precise que je bosse avec C# VS version 2003

sandra
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
27 sept. 2006 à 12:16
Salut, Form.ActiveForm pour obtenir la forme active.
0
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
27 sept. 2006 à 13:20
je veux bien mais ca ne marche pas,
c'est ce que jai fait au debut mais le programme se bloque et m'affiche un message d'erreur:  "Object reference not set to an instance of an object." 

Tu aurais peut-etre une autre idee?

sandra
0

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

Posez votre question
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
27 sept. 2006 à 14:55
Si tu as une référence nulle c'est qu'aucune forme n'est active dans ton application pour avoir la forme active du système il faut utiliser la fonction Win32 GetForegroundWindow.
0
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
27 sept. 2006 à 15:32
cad...
je ne connais pas Win32
peut tu maider un petit peu plus, je ne vois pas du tout comment faire

sandra
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
27 sept. 2006 à 15:53
Win32 c'est l'API de Windows, le framework est basé sur cette API.

Il faut définir le prototype de la fonction dans ton code :

[ System.Runtime.InteropServices.DllImport( "user32.dll" ) ]
private static extern IntPtr GetForegroundWindow( );

Puis appeller la méthode :

IntPtr handle = GetForegroundWindow( );
0
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
28 sept. 2006 à 15:49
Salut
je viens d utiliser ta fonction mais je ne sais pas quoi faire du parametre  handle
je ne suis pas du tout habituee a Win32 et je ne me suis jamais servi de Handle 
Peut tu me guider un peu encore stp?
Comment il va me servir a determiner la fenetre qui est en premier plan?

sandra
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 42
29 sept. 2006 à 10:35
Si ActiveForm renvoie null c'est qu' aucune fenêtre de ton application n'est active. Tu peux comparer le handle renvoyé par GetForegroundWindow avec le handle d'autres fenêtres. la classe Forme contient la propriété Handle. Tu peux également récupérer la liste des processus en cours et comparer leur handle de fenêtre ou encore manipuler la fenêtre grace à son handle via l'API Wiindows. etc..
0
sandra26 Messages postés 92 Date d'inscription mercredi 5 juillet 2006 Statut Membre Dernière intervention 5 août 2009
9 oct. 2006 à 15:01
je viens de faire ce que tu ma conseille mais je ne pense pas avoir compris comment je dois faire
le pb est que je veux a partir dune classe, verifier quelle fenetre est en premier plan, jai utilise la fonction que tu ma donnee mais le handle reste toujours le meme chiffre
Je mexcuse mais est-ce que tu pourrai etre plus clair sur la marche a suivre parce que je n'y arrive pas.
Je n'ai pas non plus reussi a recuperer le handle d'une fentre en faisant Form2.Handle, l'ordi me dis que cest  pas possible
Est ce qie ti peut encore maider STP?
sandra
0
survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 1
22 févr. 2007 à 16:24
Génial et comment tu fais pour rendre le focus à ta Form ?

www.survey-copter.com
0
survcopt Messages postés 224 Date d'inscription mardi 27 mai 2003 Statut Membre Dernière intervention 13 mai 2022 1
22 févr. 2007 à 16:34
Ca marche je détecte la perte de focus mais quand le focus revient "Mon application à le focus" , je n'ai plus l'event keydown . Aurais-tu une idée ?
Merci

www.survey-copter.com
0
gtrusz Messages postés 2 Date d'inscription vendredi 23 janvier 2004 Statut Membre Dernière intervention 6 octobre 2007
6 oct. 2007 à 14:27



0