Heim > Backend-Entwicklung > C++ > Wie liste ich alle Windows auf, die einer bestimmten Prozess-ID in .NET zugeordnet sind?

Wie liste ich alle Windows auf, die einer bestimmten Prozess-ID in .NET zugeordnet sind?

Linda Hamilton
Freigeben: 2025-01-06 02:00:40
Original
746 Leute haben es durchsucht

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

So zählen Sie Windows auf, die einem Prozess in .NET zugeordnet sind

Problembeschreibung

Die Aufgabe besteht darin, alle von einem bestimmten Prozess erstellten Fenster zu identifizieren und aufzulisten Prozess mit dem .NET Framework. Durch die Bereitstellung der Prozess-ID (PID) sucht diese Aufgabe nach einer effektiven Möglichkeit, alle entsprechenden Fenster aufzuzählen.

Lösung

Um dies in .NET zu erreichen, kann eine Kombination der Funktionen EnumThreadWindows und GetProcessById verwendet werden beschäftigt sein. Der folgende Codeausschnitt zeigt, wie diese Lösung implementiert wird:

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

Verwendungsbeispiel

Der bereitgestellte Code zeigt, wie alle mit dem Windows Explorer-Prozess verbundenen Fenster aufgelistet werden:

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

Durch die Verwendung dieser Lösung können Sie alle Fenster, die zu einem bestimmten Prozess gehören, effektiv auflisten und so wertvolle Einblicke in den Benutzer der Anwendung gewinnen Schnittstelle.

Das obige ist der detaillierte Inhalt vonWie liste ich alle Windows auf, die einer bestimmten Prozess-ID 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