.NET에서 특정 프로세스에 속하는 모든 창 검색
특정 프로세스와 관련된 모든 창을 열거하는 것은 다양한 자동화에 중요한 작업입니다. 프로세스 간 통신 시나리오. .NET에서는 특정 스레드에 의해 생성된 모든 창을 통해 반복을 가능하게 하는 EnumThreadWindows API를 활용하여 이를 달성할 수 있습니다.
프로세스 ID(PID)를 기반으로 프로세스에 속한 창을 열거하려면 다음을 따르세요. 다음 단계:
EnumThreadWindows를 사용하여 대상 프로세스의 모든 스레드를 반복합니다.
foreach (ProcessThread thread in Process.GetProcessById(processId).Threads) EnumThreadWindows(thread.Id, (hWnd, lParam) => { handles.Add(hWnd); return true; }, IntPtr.Zero);
사용 예:
다음은 Windows 탐색기 프로세스에서 생성된 모든 창의 창 제목을 검색하는 EnumerateProcessWindowHandles 메서드:
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의 특정 프로세스와 관련된 모든 창을 검색하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!