C#、C++、WinAPI - 从另一个进程获取窗口数
Posted
技术标签:
【中文标题】C#、C++、WinAPI - 从另一个进程获取窗口数【英文标题】:C#, C++ , WinAPI - Get Number of windows from another process 【发布时间】:2011-05-30 10:35:37 【问题描述】:可以用 C# 或 C++ 或 WinAPI 回答(我知道如何 pInvoke)。
我想要达到的目标。 我想获取另一个应用程序打开的窗口数量。 例如我有聊天应用程序。我想获取窗口数量,因为我不想检测是否有人向我发送消息(新传入消息 = 多一个窗口)。
简而言之。 如何获取另一个进程打开的窗口数。
【问题讨论】:
一个涉及 WinAPI 的答案!= C++ 中的一个答案。 @DeadMG 这可以在 WinAPI 中。我的错。 “新传入消息 = 多一个窗口”:如果目标聊天应用程序更改其 UI 以使所有消息只使用一个窗口,这将适得其反。如果您从不更改您的聊天应用程序可能没问题,但即便如此,它也确实是个杂牌。 @In silico 这只是示例。我想将它用于其他任务。但在那个聊天示例中更容易解释。 【参考方案1】:如果您有其他应用程序的进程 ID,这是一种可能的 Windows API 方式:
使用 EnumWindows 函数枚举所有***窗口,在回调函数中使用 GetWindowThreadProcessId 来测试属于您给定进程的主窗口。从匹配的主窗口中,您可以继续使用 EnumChildWindows 枚举其所有子窗口。
【讨论】:
【参考方案2】:首先,您需要***窗口的句柄。如果您知道窗口的名称,FindWindow() 会检索它。
第二步已经在 SO 上解释过很多次了:
.NET (C#): Getting child windows when you only have a process handle or PID?
How can I get the child windows of a window given its HWND?
【讨论】:
以上是关于C#、C++、WinAPI - 从另一个进程获取窗口数的主要内容,如果未能解决你的问题,请参考以下文章
简单的匿名管道 - 您使用啥包装器模型? (WinAPI, C++)