获取进程所有窗口的句柄

Posted

技术标签:

【中文标题】获取进程所有窗口的句柄【英文标题】:Get handles to all windows of a process 【发布时间】:2010-02-10 16:46:48 【问题描述】:

在使用进程类的 C# 中,我可以获得进程主窗口的句柄,但我需要访问不是其进程主窗口的窗口。如何?

【问题讨论】:

【参考方案1】:

EnumChildWindows 函数可能会对您有所帮助。子窗口也可以有子窗口等等。

还有GetWindow和EnumThreadWindows

【讨论】:

【参考方案2】:

您可以 P/Invoke GetWindowThreadProcessId() 获取拥有主窗口的 UI 线程的线程 ID。从那里,您可以使用EnumThreadWindows() 找到该线程拥有的任何其他***窗口。***窗口拥有的任何子窗口(控件)都可以通过EnumChildWindows() 找到。访问pinvoke.net 获取必要的 P/Invoke 声明。

【讨论】:

【参考方案3】:

P/调用 user32 的 EnumThreadWindows 函数,您提供的回调将获得给定线程的窗口句柄。 Process.GetCurrentProcess().Threads 应该返回给您调用EnumThreadWindows 的所有相关线程。

【讨论】:

以上是关于获取进程所有窗口的句柄的主要内容,如果未能解决你的问题,请参考以下文章

C# 根据进程ID获取进程主窗口句柄

C# 根据进程ID获取进程主窗口句柄

VC怎么通过进程ID得到窗口句柄

VB中如何根据窗口的句柄结束他的进程?

delphi 知道路径和进程如何获取窗口句柄?

C#如何通过进程名称获取指定窗口的句柄,通过该句柄获取该窗口的标题?