"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment répertorier toutes les fenêtres associées à un ID de processus donné dans .NET?

Comment répertorier toutes les fenêtres associées à un ID de processus donné dans .NET?

Publié le 2025-01-29
Parcourir:238

How to List All Windows Associated with a Given Process ID in .NET?

Comment énumérer les fenêtres associées à un processus dans .net

Problème Description

La tâche consiste à identifier et à répertorier toutes les fenêtres créées par un spécifique processus à l'aide du framework .NET. En fournissant l'ID de processus (PID), cette tâche cherche un moyen efficace d'énumérer toutes les fenêtres correspondantes.

Solution

être employé. L'extrait de code suivant montre comment implémenter cette solution:

delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

[DllImport("user32.dll")]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn,
    IntPtr lParam);

static IEnumerable EnumerateProcessWindowHandles(int processId)
{
    var handles = new List();

    foreach (ProcessThread thread in Process.GetProcessById(processId).Threads)
        EnumThreadWindows(thread.Id, 
            (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);

    return handles;
}

Exemple d'utilisation

Le code fourni démontre comment énumérer toutes les fenêtres associées au processus de l'Explorateur Windows:

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);
    }
}

En utilisant cette solution, vous pouvez énumérer efficacement toutes les fenêtres qui appartiennent à un processus spécifique, fournissant des informations précieuses sur l'interface utilisateur de l'application.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3