Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mendapatkan semula semua Windows yang dikaitkan dengan proses tertentu dalam .NET?

Bagaimana untuk mendapatkan semula semua Windows yang dikaitkan dengan proses tertentu dalam .NET?

Mary-Kate Olsen
Lepaskan: 2025-01-06 01:27:38
asal
952 orang telah melayarinya

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

Mengambil semula Semua Windows Kepunyaan Proses Tertentu dalam .NET

Menyenaraikan semua tetingkap yang dikaitkan dengan proses tertentu adalah tugas penting untuk pelbagai automasi dan senario komunikasi antara proses. Dalam .NET, ini boleh dicapai dengan memanfaatkan API EnumThreadWindows, yang membolehkan lelaran melalui semua tetingkap yang dibuat oleh urutan tertentu.

Untuk menghitung tetingkap kepunyaan proses berdasarkan ID prosesnya (PID), ikuti langkah berikut:

  1. Import DLL yang diperlukan: [DllImport("user32.dll")]
  2. Tentukan perwakilan untuk mengendalikan penghitungan: delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam)
  3. Buat IEnumerable untuk menyimpan pemegang tetingkap: pemegang = baru List()
  4. Lelar melalui semua urutan proses sasaran menggunakan EnumThreadWindows:

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

Contoh Penggunaan:

Berikut ialah contoh penggunaan Kaedah EnumerateProcessWindowHandles untuk mendapatkan semula tajuk tetingkap semua tetingkap yang dibuat oleh proses Windows Explorer:

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

Atas ialah kandungan terperinci Bagaimana untuk mendapatkan semula semua Windows yang dikaitkan dengan proses tertentu dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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