.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 Explorer プロセスによって作成されたすべてのウィンドウのウィンドウ タイトルを取得する 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 の特定のプロセスに関連付けられたすべての Windows を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。