首页 >后端开发 >C++ >如何检索与 .NET 中特定进程关联的所有 Windows?

如何检索与 .NET 中特定进程关联的所有 Windows?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-06 01:27:38959浏览

How to Retrieve All Windows Associated with a Specific Process in .NET?

检索.NET中属于特定进程的所有窗口

枚举与特定进程关联的所有窗口是各种自动化的关键任务和进程间通信场景。在 .NET 中,这可以通过利用 EnumThreadWindows API 来实现,该 API 可以迭代特定线程创建的所有窗口。

要根据进程 ID (PID) 枚举属于某个进程的窗口,请执行以下操作这些步骤:

  1. 导入必要的 DLL: [DllImport("user32.dll")]
  2. 定义一个委托来处理枚举: delegate bool EnumThreadDelegate(IntPtr hWnd, IntPtr lParam)
  3. 创建一个 IEnumerable 来存储窗口句柄:var手柄=新的List()
  4. 使用 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn