Heim >Backend-Entwicklung >C++ >Wie rufe ich alle Windows ab, die einem bestimmten Prozess in .NET zugeordnet sind?
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:
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);
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; } }
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!