首頁 > 後端開發 > C++ > 如何檢索與 .NET 中特定進程關聯的所有 Windows?

如何檢索與 .NET 中特定進程關聯的所有 Windows?

Mary-Kate Olsen
發布: 2025-01-06 01:27:38
原創
940 人瀏覽過

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

檢索.NET中屬於特定進程的所有視窗

枚舉與特定進程關聯的所有視窗是各種自動化的關鍵任務和進程間通訊場景。在 .NET 中,這可以透過利用 EnumThreadWindows API 來實現,該 API 可以迭代特定執行緒所建立的所有視窗。

要根據進程ID (PID) 枚舉屬於某個進程的窗口,請執行以下操作這些步驟:

  1. 導入必要的DLL:[DllImport("user32.dll ")]
  2. 定義一個委託來處理枚舉: delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam)
  3. 建立一個 IEnumerable 來儲存視窗句柄:var手把=新的List()
  4. 使用 EnumThreadWindows迭代目標程序的所有執行緒:

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

用法範例:

這是一個使用的範例EnumerateProcessWindowHandles 方法檢索Windows 資源管理器流程所建立的所有視窗的視窗標題:

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;
    }
}
登入後複製

以上是如何檢索與 .NET 中特定進程關聯的所有 Windows?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板