Heim > Backend-Entwicklung > C++ > Wie rufe ich alle Windows ab, die einem bestimmten Prozess in .NET zugeordnet sind?

Wie rufe ich alle Windows ab, die einem bestimmten Prozess in .NET zugeordnet sind?

Mary-Kate Olsen
Freigeben: 2025-01-06 01:27:38
Original
974 Leute haben es durchsucht

How to Retrieve All Windows Associated with a Specific Process in .NET?

Abrufen aller Fenster, die zu einem bestimmten Prozess in .NET gehören

Das Aufzählen aller Fenster, die zu einem bestimmten Prozess gehören, ist eine entscheidende Aufgabe für verschiedene Automatisierungen und prozessübergreifende Kommunikationsszenarien. In .NET kann dies durch die Nutzung der EnumThreadWindows-API erreicht werden, die die Iteration durch alle von einem bestimmten Thread erstellten Fenster ermöglicht.

Um Fenster, die zu einem Prozess gehören, basierend auf seiner Prozess-ID (PID) aufzuzählen, befolgen Sie die folgenden Schritte diese Schritte:

  1. Importieren Sie die erforderliche DLL: [DllImport("user32.dll")]
  2. Delegieren Sie einen Delegaten, um die Enumeration zu verarbeiten: Delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam)
  3. Erstellen Sie ein IEnumerable zum Speichern der Fensterhandles: var Griffe = neu List()
  4. Durchlaufen Sie alle Threads des Zielprozesses mit EnumThreadWindows:

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

Beispielverwendung:

Hier ist ein Beispiel für die Verwendung der EnumerateProcessWindowHandles-Methode So rufen Sie die Fenstertitel aller vom Windows Explorer-Prozess erstellten Fenster ab:

using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public class Program
{
    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);
        }
    }

    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;
    }
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie rufe ich alle Windows ab, die einem bestimmten Prozess in .NET zugeordnet sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage