Maison >développement back-end >C++ >Comment puis-je identifier et répertorier toutes les fenêtres appartenant à un processus spécifique à l'aide de C# ?
Identifier et énumérer les fenêtres d'un processus spécifique à l'aide de .NET
Trouver toutes les fenêtres créées par un processus particulier peut être une tâche précieuse pour divers fins. En utilisant C#, cela peut être réalisé efficacement en exploitant la fonction EnumThreadWindows.
Pour commencer, obtenez l'ID de processus (PID) de l'application pour laquelle vous souhaitez répertorier les fenêtres. Ensuite, appelez EnumThreadWindows pour chaque thread appartenant au processus. Cette fonction accepte un délégué de rappel qui prend un handle de fenêtre comme paramètre et renvoie true si l'énumération doit continuer. Au sein de ce délégué, ajoutez les handles à une collection.
Voici le code C# pour énumérer toutes les fenêtres appartenant à un processus :
delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); [DllImport("user32.dll")] static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); static IEnumerable<IntPtr> EnumerateProcessWindowHandles(int processId) { var handles = new List<IntPtr>(); foreach (ProcessThread thread in Process.GetProcessById(processId).Threads) EnumThreadWindows(thread.Id, (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero); return handles; }
Pour démontrer son utilisation, voici un exemple de code qui énumère l'explorateur traite les fenêtres et affiche leurs titres :
private const uint WM_GETTEXT = 0x000D; [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam); [STAThread] static void Main(string[] args) { foreach (var handle in EnumerateProcessWindowHandles( Process.GetProcessesByName("explorer").First().Id)) { StringBuilder message = new StringBuilder(1000); SendMessage(handle, WM_GETTEXT, message.Capacity, message); Console.WriteLine(message); } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!