[API windows] lister les controles

blink18254 Messages postés 6 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 9 janvier 2008 - 8 janv. 2008 à 22:33
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 - 9 janv. 2008 à 15:52
Bonjour a tous,

J'aimerai savoir comment je peux récupérer et lister tous les controles d'une application externe.
J'arive à récupérer le handle sur la bonne fenetre, mais ensuite je ne sais pas.

merci

5 réponses

Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
9 janv. 2008 à 01:35
0
blink18254 Messages postés 6 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 9 janvier 2008
9 janv. 2008 à 09:48
ok merci mais comment ca marche en C#, et c'est quoi une callback function?
Je n'ai pas trouvé d'exemples C# sur le net.
0
bernie666 Messages postés 427 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 29 janvier 2008 1
9 janv. 2008 à 10:21
Salut,

Je te conseil de te rendre ici ;)

http://pinvoke.net/

-------------------------------------------http://quoideneufaujourdhui.spaces.live.com
0
blink18254 Messages postés 6 Date d'inscription vendredi 10 février 2006 Statut Membre Dernière intervention 9 janvier 2008
9 janv. 2008 à 11:25
merci bcp, j'obtiens donc une liste contenant des IntPtr venant d'une fenetre.
Mais maintenant comment je sais a quoi correspond tel intPtr, et comment récupérer ses propriétés (car ils sont tous de types différents).

J'espère que j'arrive à me faire comprendre...
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 41
9 janv. 2008 à 15:52
Une fois que tu possèdes le handle d'un contrôle enfant, tu peux utiliser toutes les fonctions Win32 disponibles avec ce handle, comme par exemple GetClassName, pour connaitre son "type" :

public partial class Form1 : Form
{
    [ DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true ) ]
    private static extern int GetClassName
        ( IntPtr hWnd, StringBuilder lpClassName, int nMaxCount );


    //[ DllImport( "user32.dll", CharSet = CharSet.Auto, SetLastError = true ) ]
    //private static extern uint RealGetWindowClass
    //    ( IntPtr hwnd, StringBuilder pszType, uint cchType );


    [ DllImport( "user32.dll" ) ]
    private static extern bool EnumChildWindows
        ( IntPtr hWndParent, EnumChildProc lpEnumFunc, IntPtr lParam );


    private delegate bool EnumChildProc( IntPtr hwnd, IntPtr lParam );


    public Form1( )
    {
        InitializeComponent( );


        this.Show( );


        Button b = new Button( );
        b.Parent = this;
        b.Text = "Enum";
        b.Click += delegate  // Méthode anonyme
        {
            try
            {
                EnumChildWindows
                (
                    this.Handle,
                    delegate ( IntPtr hwnd, IntPtr lParam ) // Méthode anonyme
                    {
                        StringBuilder className = new StringBuilder( 256 );
                        int res = GetClassName( hwnd, className, className.Capacity );


                        if ( res == 0 )
                            throw new Win32Exception( Marshal.GetLastWin32Error( ) );


                        MessageBox.Show( className.ToString( ) );
                        return true;
                    },
                    IntPtr.Zero
                );
            }
            catch ( Exception ex )
            {
                MessageBox.Show( ex.ToString( ) );
            }
        };
    }
}
0
Rejoignez-nous