检索.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中文网其他相关文章!