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 :

Aide sur EnumWindows + FindWindow


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2007
    Messages : 18
    Par défaut Aide sur EnumWindows + FindWindow
    Bonjour à tous,

    j'ai un soucis avec la class EnumWindows et FindWindow que voici :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
        class ClassEW
        {
            private IntPtr _hwdn;
            private string _name;
            private static List<ClassEW> _windows = new List<ClassEW>();
     
            public IntPtr HWND { get { return this._hwdn; } }
            public string Name { get { return this._name; } }
     
            public ClassEW(IntPtr hwnd, string name)
            {
                this._hwdn = hwnd;
                this._name = name;
            }
     
            public override string ToString()
            {
                return this._name;
            }
     
            private static bool EnumWindows(IntPtr hwnd, int lparam)
            {
                if (!string.IsNullOrEmpty(NativeMethods.GetWindowText()))
                {
                    ClassEW window = new ClassEW(hwnd, NativeMethods.GetWindowText(hwnd));
                    _windows.Add(window);
                }
                return true;
            }
     
            public static List<ClassEW> GetWindowsList()
            {
                NativeMethods.EnumWindows(new NativeMethods.EnumWindowsCallBack(EnumWindows), 0);
                return _windows;
            }
     
            internal static class NativeMethods
            {
                public delegate bool EnumWindowsCallBack(IntPtr hwnd, int lParam);
     
                [DllImport("user32.dll")]
                internal static extern int EnumWindows(EnumWindowsCallBack lpEnumFunc, int lParam);
     
                [DllImport("user32.dll")]
                [return: MarshalAs(UnmanagedType.Bool)]
                private static extern bool IsWindowVisible(IntPtr hWnd);
     
                [DllImport("user32.dll")]
                private static extern int GetWindowText(IntPtr hWnd, [Out] StringBuilder lpString, int nMaxCount);
     
                [DllImport("user32.dll")]
                private static extern int GetWindowTextLength(IntPtr hWnd);
     
                [DllImport("user32.dll", SetLastError = true)]
                internal static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
     
                internal static string GetWindowText((IntPtr hWnd)
                {
                    StringBuilder sb = new StringBuilder(GetWindowTextLength(hWnd)+ 1);
                    GetWindowText(hWnd, sb, sb.Capacity);
                    return sb.ToString();
                }
            }
        }
    Je fait appel a la fonction GetWindowsList pour ensuite l'afficher dans une ListView comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                foreach (ClassEW A in ClassEW.GetWindowsList())
                {
                    ListViewItem LVI = ListView.Items.Add(A.HWND.ToString());
                    LVI.SubItems.Add(A.Name);
                }
    Je voudrais faire en sorte de lister seulement un seul processus par la "ClassName" pour voir ainsi les différentes instance de se processus. Pour cela j'ai rajouter la fonction "FindWindow", mais après plusieurs tests je n'y arrive pas, je ne sais pas ou et comment place cette dernière fonction.

    Pourriez vous m'aider ?

    PS : J'utilise cette API pour afficher correctement le titre de l'application, même en état réduit.

    Bien cordialement.

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2007
    Messages : 18
    Par défaut
    J'ai posé une colle ou sa intéresse personne ?

  3. #3
    Membre Expert

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    2 067
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2 067
    Par défaut
    Il existe sur le framework une fonction qui permet de récupérer la liste des processus http://msdn.microsoft.com/fr-fr/libr...=vs.80%29.aspx.

    Et tu peux faire une recherche par nom.

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Janvier 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Lot (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Janvier 2007
    Messages : 18
    Par défaut
    oui je connait déjà, mais cette fonction ne retourne pas le nom de la fenêtre quand elle est dans un état réduit. C'est pour cela que je me suis tourner vers EnumWindows.

Discussions similaires

  1. Besoin d'aide sur FindWindow()
    Par Chris33 dans le forum Général Python
    Réponses: 2
    Dernier message: 29/10/2009, 10h47
  2. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  3. Réponses: 2
    Dernier message: 27/02/2003, 01h33
  4. [Kylix] Aide sur BitBlt
    Par mic006 dans le forum EDI
    Réponses: 1
    Dernier message: 10/12/2002, 22h54
  5. Aide sur une fenetre
    Par Ray-j dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 29/11/2002, 08h51

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