檢索.NET中屬於特定進程的所有視窗
枚舉與特定進程關聯的所有視窗是各種自動化的關鍵任務和進程間通訊場景。在 .NET 中,這可以透過利用 EnumThreadWindows API 來實現,該 API 可以迭代特定執行緒所建立的所有視窗。
要根據進程ID (PID) 枚舉屬於某個進程的窗口,請執行以下操作這些步驟:
使用 EnumThreadWindows迭代目標程序的所有執行緒:
foreach (ProcessThread thread in Process.GetProcessById(processId).Threads) EnumThreadWindows(thread.Id, (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);
用法範例:
這是一個使用的範例EnumerateProcessWindowHandles 方法檢索Windows 資源管理器流程所建立的所有視窗的視窗標題:
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; } }
以上是如何檢索與 .NET 中特定進程關聯的所有 Windows?的詳細內容。更多資訊請關注PHP中文網其他相關文章!