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