IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Détecter si le focus est sur le bureau


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 83
    Points : 87
    Points
    87
    Par défaut Détecter si le focus est sur le bureau
    Bonjour à tous,

    Je tente de détecter si le focus est sur le bureau.
    Pour le moment, je parviens à le déterminer uniquement losque je me trouve sur le bureau sans la moindre fenêtre à l'écran. Dés lors qu'il y a une fenêtre passive en même temps ça ne fonctionne plus.

    NB: par fenêtre passive, j'entends une fenêtre qui aurait perdue son focus mais qui resterait présente graphiquement.


    Voici mon code de test:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    class Program
        {
     
            [DllImport("user32.dll")]
            private static extern IntPtr GetForegroundWindow();
     
            [DllImport("user32.dll")]
            static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
     
     
            static void Main(string[] args)
            {
     
                for(;;)
                {
                    Thread.Sleep(2000);
                    Console.WriteLine(onDesktop());
                }
     
            }
     
           static bool onDesktop()
            {
                const int nChars = 256;
                StringBuilder Buff = new StringBuilder(nChars);
                IntPtr handle = GetForegroundWindow();
     
                if (GetWindowText(handle, Buff, nChars) == 0)
                {
                    return true;  
                }
                return false;
            }
     
        }
    Si quelqu'un a une petite idée je suis preneur!

    Merci de m'avoir lu.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Tu peux essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    [DllImport("user32.dll")]
    private static extern IntPtr GetForegroundWindow();
    [DllImport("user32.dll")]
    private static extern IntPtr FindWindow(string sClass, string sName);
     
    static bool onDesktop()
    {
      return GetForegroundWindow() == FindWindow("Progman", null);
    }
    Le mieux est quand même de stocker le handle du Progman car il ne change pas. Ce qui évite de rappeler FindWindow à chaque appel de la fonction.

    Bonne journée.

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 83
    Points : 87
    Points
    87
    Par défaut
    Ah super merci !

    C'est exactement ce que je cherchais.
    Par contre, je ne comprends pas très bien la signification de "Progman": je n'ai trouvé cette classe nulle part dans la doc.
    Qu'est ce que ça signifie ? ^^

    Merci encore.

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par stoner Voir le message
    Par contre, je ne comprends pas très bien la signification de "Progman": je n'ai trouvé cette classe nulle part dans la doc.
    Qu'est ce que ça signifie ?
    Toutes les fenêtres (visibles/invisibles) sont regroupées dans un espèce d'arbre dont la dernière feuille est le Program Manager (d'où Progman). C'est le shell qui permet de gérer les fenêtres. Cette feuille contient d'ailleurs une fenêtre SysListView32 qui s'occupe du rendu des icônes sur le bureau.

    On peut observer cet arbre grâce à Spy++ (fourni avec Visual Studio).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 83
    Points : 87
    Points
    87
    Par défaut
    Merci pour ces explications!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment afficher sur sa TV ce qui est sur le bureau KDE
    Par stephijos dans le forum Mandriva / Mageia
    Réponses: 7
    Dernier message: 16/11/2013, 16h19
  2. Réponses: 1
    Dernier message: 31/10/2012, 15h50
  3. Changement de style d'un bouton lorsqu'un focus est sur le formulaire
    Par marcandre dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 17/10/2009, 18h04
  4. Détecter ce qui se passe sur le bureau
    Par Apprenti-Programmeur dans le forum Général Java
    Réponses: 1
    Dernier message: 17/02/2009, 07h22
  5. Réponses: 1
    Dernier message: 23/01/2007, 10h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo