Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menghitung Windows Proses Tertentu dalam .NET?

Bagaimana untuk Menghitung Windows Proses Tertentu dalam .NET?

Patricia Arquette
Patricia Arquetteasal
2025-01-05 21:14:48854semak imbas

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

Menyenaraikan Windows Proses Tertentu dalam .NET

Mencari semua tetingkap yang dicipta oleh proses tertentu adalah keperluan biasa dalam banyak aplikasi. Dalam .NET, beberapa kaedah tersedia untuk mencapai tugas ini. Satu pendekatan melibatkan penghitungan tetingkap benang yang dikaitkan dengan proses sasaran.

Menggunakan Fungsi EnumThreadWindows

Fungsi EnumThreadWindows daripada pustaka user32.dll membenarkan penghitungan semua tetingkap kepunyaan benang tertentu. Untuk menghitung tetingkap proses tertentu, anda boleh mengulangi urutannya dan menggunakan EnumThreadWindows untuk setiap urutan.

Pelaksanaan Kod:

Perwakilan berikut digunakan sebagai panggilan balik dalam EnumThreadWindows:

delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam);

Coretan kod berikut menyenaraikan pemegang tetingkap proses menggunakan ID prosesnya (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;
}

Penggunaan Contoh:

Untuk menunjukkan penggunaan, anda boleh mendapatkan semula tajuk tetingkap dan cetaknya ke konsol:

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

Atas ialah kandungan terperinci Bagaimana untuk Menghitung Windows Proses Tertentu dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn