6

谁能告诉我如何识别特定的后台进程(即,已经运行的应用程序)并将其带到前台?例如,如果记事本应用程序在后台运行,当我运行我的 WIN32 应用程序时,它应该识别记事本应用程序并且记事本应该弹出或进入前台。

我尝试了 SwitchToThisWindow() 函数,但它的工作方式类似于 Alt+tab。它不会识别后台进程。

请建议我为此的演练指南..

谢谢..

4

2 回答 2

5

目前尚不清楚“后台进程”是什么意思,但这里有一些想法:

使用EnumWindows获取桌面上的所有顶级 HWND。这将包括一堆你不想要的东西,你必须过滤掉。建议您使用 Spy++ 来查看 HWND 树的外观,以及您会在此处找到的 HWND 类型:

从这个集合中,您需要过滤掉或忽略不可见的 HWND(使用 IsWindowVisible 或检查 WS_VISIBLE 样式)。

还要过滤出设置了 WS_POPUP 的窗口——这些窗口包括工具提示、菜单弹出窗口、浮动工具栏等。

要过滤掉当前活动的窗口,(如果你还不知道的话)使用 GetGUIThreadInfo with idThread=0; GUIHREADINFO.hwndActive 返回活动窗口,因此任何不是它的顶级 HWND 都是非活动窗口。

如果您正在寻找最小化的窗口,您可以使用IsIconic(hwnd)检测到那些。

最后,当您找到一个您认为是“背景”的窗口时,您可以使用 GetWindowText 获取标题,或使用 GetWindowThreadProcessId 获取进程 ID。

于 2012-06-13T11:23:16.887 回答
3

但是有什么方法可以识别后台进程

这是 Unix shell 的概念,Windows 没有。现在我有 10 个“后台”进程创建了不在前台的窗口,另外 50 个左右没有。它们都不是后台进程,它们都同样具有背景。您通常单击窗口的任务栏按钮或按 Alt+Tab 将其中一个切换到前台。或者在代码中调用 SetForegroundWindow()。

于 2012-06-13T07:41:04.933 回答