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

Bagaimana untuk Menghitung Windows Proses Tertentu dalam .NET?

Patricia Arquette
Lepaskan: 2025-01-05 21:14:48
asal
899 orang telah melayarinya

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);
Salin selepas log masuk

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;
}
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan