Untuk menghitung semua tetingkap yang dicipta oleh proses tertentu, anda boleh menggunakan kaedah berikut. Mula-mula, dapatkan ID proses bagi proses tertentu. Anda kemudiannya boleh memanggil kaedah EnumerateProcessWindowHandles dalam kod berikut untuk menghitung semua pemegang tetingkap yang dimiliki oleh proses tersebut.
delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam); [DllImport("user32.dll")] static extern bool EnumThreadWindows(int dwThreadId, EnumThreadDelegate lpfn, IntPtr lParam); 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; }
Contoh berikut akan mencetak tajuk semua tetingkap yang dimiliki oleh proses bernama "explorer":
const uint WM_GETTEXT = 0x000D; [DllImport("user32.dll", CharSet = CharSet.Auto)] static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, int wParam, StringBuilder lParam); 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 Semua Windows Kepunyaan Proses Khusus dalam .NET?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!