Maison > développement back-end > C++ > 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 ?

Linda Hamilton
Libérer: 2025-01-06 02:00:40
original
776 Les gens l'ont consulté

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

Description du problème

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

Solution

Pour y parvenir dans .NET, une combinaison des fonctions EnumThreadWindows et GetProcessById peut ê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<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;
}
Copier après la connexion

Exemple d'utilisation

Le code fourni 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);
    }
}
Copier après la connexion

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

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal