在 Windows 10 中将一个应用程序放在另一个应用程序前面

Bring one application in front of another in Windows 10

本文关键字:应用程序 一个 前面 另一个 Windows      更新时间:2023-10-16

我有两个独立的进程在Qt上运行,我需要能够将一个进程放在另一个进程之前。他们都互相交流,所以你会认为这不是一个大问题。但是,Windows 10对此非常严格。我所能做的就是使我想放在前面的窗口在窗口工具栏中闪烁橙色。

到目前为止,我正在尝试使用的代码:

A类(当前处于活动状态):

AllowSetForegroundWindow(ASFW_ANY);

B类(我想带在前面的那个):

#ifdef WIN32
if(hWnd)
{
SetForegroundWindow(hWnd);
SetActiveWindow(hWnd);
BringWindowToTop(hWnd);
}
#endif

hWnd 是更早获得的(而 B 类是活动窗口),具有:

hWnd = GetActiveWindow();

我是不是误会了什么?为什么这仍然不起作用?

如何始终将Qt/Windows小部件设置在顶部?

遇到上述很多问题后,以下解决方案对我有用:

void widgetToTop(QWidget* widget)
{
bool wasMax = widget->isMaximized();
bool wasMin = widget->isMinimized();
HWND h = (HWND)widget->winId();
if (wasMax || wasMin)
{
::ShowWindow(h, SW_SHOW);
::ShowWindow(h, wasMax ? SW_MAXIMIZE : SW_RESTORE);
::SetForegroundWindow(h);
}
else
{
::ShowWindow(h, SW_SHOWNORMAL);
::SetForegroundWindow(h);
}
}

当然,这可以使用纯Win32 API进行返工。

附言也许解决方案并不完全是"在另一个之上",但可能已经足够了。