谁能告诉我如何识别特定的后台进程(即已经运行的应用程序)并将其带到前台?例如,如果Notepad应用程序在后台运行,当我运行WIN32应用程序时,它应该识别记事本应用程序,并且应该弹出记事本或前台.
我尝试过SwitchToThisWindow()函数,但它的作用类似于Alt + tab.它不会识别后台进程.
请建议我这个演练指南..
谢谢..
目前尚不清楚“后台进程”是什么意思,但这里有一些想法:
使用EnumWindows获取桌面上的所有顶级 HWND。这将包括一堆您不想要的东西,您必须将其过滤掉。建议您使用 Spy++ 来查看 HWND 树是什么样子,以及您会在这里找到什么样的 HWND:
从这个集合中,您需要过滤掉或忽略不可见的 HWND(使用 IsWindowVisible 或检查 WS_VISIBLE 样式)。
还要过滤掉设置了 WS_POPUP 的窗口 - 这些窗口包括工具提示、菜单弹出窗口、浮动工具栏等。
要过滤掉当前活动的窗口,(如果您还不知道的话)使用 GetGUIThreadInfo 且 idThread=0; GUIHREADINFO.hwndActive 返回活动窗口,因此任何不是它的顶级 HWND 都是非活动窗口。
如果您专门寻找最小化窗口,则可以使用IsIconic(hwnd)检测它们。
最后,当您找到认为是“背景”的窗口时,可以使用 GetWindowText 获取标题,或使用 GetWindowThreadProcessId 获取进程 ID。
但是有什么办法可以识别后台进程吗
这是 Unix shell 的概念,Windows 没有。现在我有 10 个“后台”进程创建了不在前台的窗口,另外还有 50 个左右的进程没有创建。它们都不是后台进程,它们都同样具有背景性。通常,单击窗口的任务栏按钮或按 Alt+Tab 将其中一个窗口切换到前台。或者在代码中调用SetForegroundWindow()。