我想让我的GUI用户(GI用户?)直接切换到已知的友好应用程序,例如按键盘快捷键。理想情况下,我的应用程序会请求OS / Windows按名称或主窗口标题字符串“XYZ”显示应用程序。
手动操作路径为ALT+TAB以打开Windows 任务切换器,然后找到并导航到所需的应用程序图标,最后将其带到活动程序窗口的前台。或者,通过Task Bar进行导航。
AutoHotkey有一个功能WinActivate可以完成我想要的功能。
答案 0 :(得分:4)
以下代码在Windows 7上没有问题:
#include <windows.h>
[...]
// find window handle using the window title
HWND hWnd = ::FindWindow(NULL, L"Window Title");
if (hWnd) {
// move to foreground
::SetForegroundWindow(hWnd);
}
答案 1 :(得分:2)
如果应用程序真的很友好,即两者都在一个人的控制之下,一个更简单的解决方案可能会使用通信套接字或共享库,允许其他应用程序自行启动。
这似乎很棘手 - 延迟通话:
QTimer::singleShot( 2000,
this,
SLOT( toForeground() )
);
到这个位置:
void MainWindow::toForeground()
{
qDebug() << SetForegroundWindow( this->winId() );
}
这将显示任务栏并很快突出显示应用程序图标。它不会切换到应用程序。
Qt自己的activateWindow()
会导致更持久的闪烁任务栏图标,但不会引发应用程序。
之前已经尝试过:
后者暗示:
showNormal();
raise();
activateWindow();
但是在Qt 4.8.1和MSVC ++ 2010的Windows 7 64位上,这对我不起作用。
以下是我认为在其他问题中也提到过的代码:
作者写道
它始终将窗口带到前面,但焦点在某处 在系统中:-(在其他一些应用程序......
我可以确认一下。
<小时/> 编辑: Windows的行为可以(不应该!?)通过Registry全局更改: https://stackoverflow.com/a/6087923/1619432指向http://qt-project.org/faq/answer/qwidget_activatewindow_-_behavior_under_windows
答案 2 :(得分:0)
搜索WinActivate会导致AutoHotkey forum post链接到WinAPI的GetForegroundWindow和SetForegroundWindow。
BOOL WINAPI SetForegroundWindow(
_In_ HWND hWnd
);
然而,这不是一个真正的解决方案,因为它
后一个链接非常复杂,但作者似乎放弃了。