识别后台进程并在 C++ WIN32 中置于前台

To identify the background process & bring to foreground in C++ WIN32

本文关键字:于前台 前台 后台进程 C++ WIN32 识别      更新时间:2023-10-16

谁能告诉我如何识别特定的后台进程(即已经在运行的应用程序)并置于前台?例如,如果记事本应用程序在后台运行,则当我运行 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()。