识别背景过程&在C ++ WIN32中引入前景

时间:2012-06-13 05:59:06

标签: c++ winapi

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

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

请建议我这个演练指南..

谢谢..

2 个答案:

答案 0 :(得分:4)

目前尚不清楚“背景流程”的含义,但这里有一些想法:

使用EnumWindows让您所有桌面上的顶级HWND。这将包括一些您不希望过滤掉的东西。建议您使用Spy ++来查看HWND树的外观,以及您可以在这里找到的HWND类型:

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

同时过滤掉设置了WS_POPUP的窗口 - 这些是工具提示,菜单弹出窗口,浮动工具栏等等。

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

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

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

答案 1 :(得分:3)

  

但有没有办法确定后台流程

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