首页 > 解决方案 > SetForegroundWindow 如果子进程有焦点

问题描述

我开发了一个应用程序,它启动外部进程(例如记事本等)并在我的应用程序的面板内显示进程的主窗口。(就像在这个线程中描述的那样)

问题是我遇到了很多焦点问题。例如,当一个窗口在我的应用程序窗口上方并且我单击子进程的窗口时,主窗口不会出现在前台。

当子进程获得焦点时,我试图通过从主应用程序调用 SetForegroundWindow 来解决这个问题,但是因为这个这个线程描述的只有当进程正在被调试或者它是前台进程时才有效。通过调用 AttachThreadInput 有一种解决方法,但这并不是 100% 可靠的。

如果“进程由前台进程启动”,SetForegroundWindow 也应该工作,但在我的情况下,它是另一种方式。(前台进程被进程启动)

如果焦点窗口是我的进程的子进程,有没有办法获得设置前景窗口的权利?

标签: c#winapi

解决方案


SetForegroundWindow 将创建指定窗口的线程设置到前台。

BringWindowToTop将指定窗口带到 Z 顺序的顶部。


推荐阅读