【发布时间】:2018-02-05 11:07:43
【问题描述】:
我有两个使用 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 7 和 8.1 下对我有用 也许它在 Windows 10 下仍然有效。 this->setWindowState((this->windowState() & ~Qt::WindowMinimized) | Qt::WindowActive); this->setVisible(false); this->setVisible(true); this->setFocus(); BringWindowToTop((HWND)this->winId()); this 是 QWidget 的子类
-
AllowSetForegroundWindow是否返回成功,在调用AllowSetForegroundWindow和尝试激活进程 B 之间是否有用户输入(因为授予进程 B expires as soon as the user generates more input 的权限)? -
@GSerg 我不知道 AllowSetForegroundWindow 在用户输入时到期。在通话之间确实有输入。这解决了问题:) 谢谢!
-
@AcerExtensa 你的代码似乎和我的一样。只要 AllowSetForegroundWindow 设置正确,它就可以工作。
-
@AcerExtensa 我要补充一点,与 GetActiveWindow() 相比,((HWND)this->winId() 是一种更优雅的获取 hwnd 的方法,因为后者仅在窗口处于当前处于活动状态,而前者随时可用。
标签: c++ windows qt windows-10