„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie liste ich alle Fenster auf, die einer bestimmten Prozess -ID in .NET zugeordnet sind?

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

Veröffentlicht am 2025-01-29
Durchsuche:595

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

wie man Fenster aufgezählt Prozess mithilfe des .NET -Frameworks. Durch die Bereitstellung der Prozess -ID (PID) sucht diese Aufgabe eine effektive Möglichkeit, alle entsprechenden Fenster aufzählen.

Lösung

, um dies in .NET zu erreichen angestellt sein. Der folgende Code -Snippet zeigt, wie diese Lösung implementiert wird:

delegieren Sie bool enumthreaddelegate (intptr hwnd, intptr lparam); [Dllimport ("user32.dll")] statische externe Bool EnumthreadWindows (int dwthreadid, enumthreaddelegate lpfn, Intptr lparam); statische Ienumerable EnrumerateProcessWindowHandles (int processID) { var handles = new List (); foreach (processThread thread in process.getProcessbyId (processId) .threads) EnumthreadWindows (Thread.id, (hwnd, lparam) = & gt; {griffs.add (hwnd); zurückkehren; }, Intptr.zero); Returngriffe; }

nutzungsbeispiel

delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

[DllImport("user32.dll")]
static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn,
    IntPtr lParam);

static IEnumerable EnumerateProcessWindowHandles(int processId)
{
    var handles = new List();

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

    return handles;
}

private const uint wm_gettext = 0x000d; [Dllimport ("user32.dll", charset = charset.auto)]]] statische externe intptr sendMessage (intptr hwnd, uint msg, int wparam, StringBuilder lparam); [Stathread] statische void main (String [] args) { foreach (var Handle in aufzähliger ProcessWindowHandles ( Process.getProcessSyName ("explorer"). First (). Id)) { StringBuilder message = new StringBuilder (1000); SendMessage (Handle, Wm_GetText, Message.Capacity, Message); Console.WriteLine (Nachricht); } }

Durch die Verwendung dieser Lösung können Sie alle Fenster, die zu einem bestimmten Prozess gehören, effektiv aufzählen und wertvolle Einblicke in die Benutzeroberfläche der Anwendung geben.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3