Récupérer tous les contrôles d’une fenêtre avec leur type et leur valeur

Mon application ressemble à l’application Spy ++: je veux être capable de récupérer automatiquement tous les différents contrôles de la fenêtre active (toute application) et leurs enfants, et pour chaque contrôle, je veux connaître le type, le nom et la valeur. (légende ou texte).

J’utilise une application Windows C #.

Quelle est la solution pour parcourir tous les contrôles de la fenêtre de premier plan et leurs enfants (et ainsi de suite) et récupérer le nom, le type et la valeur?

Pour énumérer les fenêtres de niveau supérieur, utilisez EnumWindows() , pour obtenir leurs fenêtres enfants, utilisez EnumChildWindows() .

En utilisant les HWND de l’énumération, une fenêtre de niveau supérieur avec une valeur de barres de titre peut être lue via GetWindowText() . Pour d’autres fenêtres, vous pouvez utiliser le message WM_GETTEXT ou, selon votre WM_GETTEXT , un message spécifique à la classe windows. tel que LB_GETTEXT pour une listbox.

RealGetWindowClass() vous donnera la classe windows.

Référence de l’API de fenêtre; http://msdn.microsoft.com/en-us/library/ff468919%28v=VS.85%29.aspx

Oui, vous devrez utiliser l’API Windows si c’est une fenêtre qui ne fait pas partie de votre application actuelle. Cela vous donnera la fenêtre actuellement active:

 using System; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Text; public class MainClass // Declare external functions. [DllImport("user32.dll")] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll")] private static extern int GetWindowText(IntPtr hWnd, SsortingngBuilder text, int count); public static void Main() { int chars = 256; SsortingngBuilder buff = new SsortingngBuilder(chars); // Obtain the handle of the active window. IntPtr handle = GetForegroundWindow(); // Update the controls. if (GetWindowText(handle, buff, chars) > 0) { Console.WriteLine(buff.ToSsortingng()); Console.WriteLine(handle.ToSsortingng()); } } } 

Il utilise la fonction GetWindowText () pour trouver le nom de la fenêtre. Je suppose donc que cela ne devrait pas poser de problème de rechercher d’autres propriétés des fenêtres telles que ses contrôles, etc.

Il existe un certain nombre de fonctions de l’API Win32 que vous pouvez utiliser pour écrire votre propre programme Spy ++. Ce lien explique comment écrire un clone Spy ++ dans Visual Basic. Je sais que vous n’utilisez probablement pas Visual Basic, mais ce document explique comment dupliquer Spy ++ à l’aide de l’API Win32. Cela ne devrait pas demander beaucoup d’efforts pour traduire cela en C #.