Magazine Internet

[PInvoke] Trouver toute les Windows d’un Process

Publié le 01 septembre 2009 par Jeremy.jeanson

Ces dernières semaine j’ai été amené à refaire pas mal d’interop avec l’ami user32.dll. Je me suis retrouvé face à un petit souci basic, mais contraignant : il n’existe pas de méthode qui retourne toutes les windows d’un process. Par contre il existe EnumThreadWindows qui elle énumère les windows d’un Thread. J’ai donc créer une méthode EnumProcessWindows qui utilise EnumThreadWindows.

Son usage est similaire à celui de EnumThreadWindows. Il faut donc lui passer une méthode de Callback qui serra lancée pour chaque windows découverte.

Vb

Imports System
Imports System.Text
Imports System.Runtime.InteropServices

Public Class mNativeMethods

    ''' <summary>
    ''' CallBack
    ''' </summary>
    ''' <param name="hWnd"></param>
    ''' <param name="lParam"></param>
    ''' <returns></returns>
    Public Delegate Function Win32CallBack(ByVal hWnd As IntPtr, ByVal lParam As IntPtr) As Boolean

    ''' <summary>
    ''' Enumérer les windows d'un Thread
    ''' </summary>
    ''' <param name="dwThreadId"></param>
    ''' <param name="callback"></param>
    ''' <param name="lParam"></param>
    ''' <returns></returns>
    <DllImport("user32.dll")> _
    Public Shared Function EnumThreadWindows( _
         ByVal dwThreadId As UInt32, _
         ByVal callback As Win32CallBack, _
         ByVal lParam As IntPtr) As Boolean
    End Function

    ''' <summary>
    ''' Enumérer les windows d'un process
    ''' </summary>
    ''' <param name="process"></param>
    ''' <param name="callback"></param>
    Public Shared Sub EnumProcessWindows( _
        ByVal process As System.Diagnostics.Process, _
        ByVal callback As Win32CallBack)
        For Each t As System.Diagnostics.ProcessThread In process.Threads
            EnumThreadWindows( _
                Convert.ToUInt32(t.Id), _
                callback, _
                IntPtr.Zero)
        Next
    End Sub
End Class

C#

using System;
using System.Text;
using System.Runtime.InteropServices;

public class NativeMethods
{
    /// <summary>
    /// CallBack
    /// </summary>
    /// <param name="hWnd"></param>
    /// <param name="lParam"></param>
    /// <returns></returns>
    public delegate Boolean Win32CallBack(IntPtr hWnd, IntPtr lParam);

    /// <summary>
    /// Enumérer les windows d'un Thread
    /// </summary>
    /// <param name="dwThreadId"></param>
    /// <param name="callback"></param>
    /// <param name="lParam"></param>
    /// <returns></returns>
    [DllImport("user32.dll")]
    [return: MarshalAs(UnmanagedType.Bool)]    
    public static extern Boolean EnumThreadWindows(
        UInt32 dwThreadId,
        Win32CallBack callback,
        IntPtr lParam);

    /// <summary>
    /// Enumérer les windows d'un process
    /// </summary>
    /// <param name="process"></param>
    /// <param name="callback"></param>
    public static void EnumProcessWindows(
        System.Diagnostics.Process process,
        Win32CallBack callback)
    {
        foreach (System.Diagnostics.ProcessThread t in process.Threads)
        {
            EnumThreadWindows(
                Convert.ToUInt32(t.Id),
                callback,
                IntPtr.Zero);
        }
    }
}

Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

  • Apres Windows 7, Windows 8 en 2012 !

    Apres Windows 2012

    Maintenant que Windows 7 commence à être disponible en version finale pour certaines populations et que la commercialisation est prévue pour le 22 octobre, les... Lire la suite

    Par  Greg Marques
    INTERNET, A CLASSER
  • Trouver des clients

    J'ai une boutique de vente en ligne qui doit vendre des logiciels antivirus d'une marque très connue et ma problématique peut se résumer en une question simple ... Lire la suite

    Par  Jbjweb
    INTERNET
  • Le dernier-né de Windows : Windows 7

    Windows 7 : Lancement jeudi 22 octobre 2009 du nouveau système d’exploitation Windows 7 , beaucoup plus léger que son prédécesseur Windows Vista. Plus... Lire la suite

    Par  Actualitesduweb
    INTERNET, WEB2.0
  • Collaboratif : commencez par les process !

    Voici le récit récent d'une anecdote pas si anodine que cela sur la problématique d'intégrer une solution de réseau social d'entreprise, ou plate-forme... Lire la suite

    Par  Jbplantin
    FOCUS EMPLOI, INTERNET
  • trouver des annuaires

    trouver annuaires

    Pour faire suite à ma série sur les liens durs provenant des annuaires généralistes, je vous ai fait un petit clip: [See post to watch Flash video] Voici les... Lire la suite

    Par  Jeanboucher
    INTERNET, MOTEUR DE RECHERCHE
  • l'iPhone a intégré Windows...Windows 7

    Dans la série "je ne sais pas mais je t'explique"Un Peu de hign-Tech ce matin dans l'émission Télématin " France 2", Yann Lavoix (donc le specialiste maison)... Lire la suite

    Par  Greg Marques
    INTERNET, A CLASSER
  • Windows 3.1

    Windows

    Pour les nostalgiques, un petit site qui va faire très plaisir. En effet, voici l'émulateur d'un des plus vieux systèmes d'exploitation de Microsoft : Windows... Lire la suite

    Par  Youcou
    HIGH TECH, INTERNET

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte