Heim >Backend-Entwicklung >C++ >Wie zähle ich Windows eines bestimmten Prozesses in .NET auf?

Wie zähle ich Windows eines bestimmten Prozesses in .NET auf?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-05 21:14:48903Durchsuche

How to Enumerate Windows of a Specific Process in .NET?

Auflisten von Fenstern eines bestimmten Prozesses in .NET

Das Finden aller von einem bestimmten Prozess erstellten Fenster ist in vielen Anwendungen eine häufige Anforderung. In .NET stehen mehrere Methoden zur Verfügung, um diese Aufgabe zu erfüllen. Ein Ansatz besteht darin, Thread-Fenster aufzuzählen, die dem Zielprozess zugeordnet sind.

Verwendung der Funktion „EnumThreadWindows“

Die Funktion „EnumThreadWindows“ aus der Bibliothek „user32.dll“ ermöglicht die Aufzählung aller zugehörigen Fenster ein bestimmter Thread. Um Fenster eines bestimmten Prozesses aufzuzählen, können Sie seine Threads durchlaufen und EnumThreadWindows für jeden Thread aufrufen.

Code-Implementierung:

Der folgende Delegat wird als Rückruf verwendet in EnumThreadWindows:

delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

Das folgende Codefragment listet die Fensterhandles von auf ein Prozess unter Verwendung seiner Prozess-ID (PID):

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

Beispielverwendung:

Um die Verwendung zu demonstrieren, können Sie die Fenstertitel abrufen und ausdrucken Konsole:

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

Das obige ist der detaillierte Inhalt vonWie zähle ich Windows eines bestimmten Prozesses in .NET auf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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