我想讓我的GUI用戶(GI用戶?)直接切換到已知的友好應用程序,例如,通過鍵盤快捷鍵。理想情況下,我的應用程序會要求OS/Windows按名稱或主窗口標題字符串「XYZ」顯示應用程序。如何切換到Windows上的其他應用程序(使用C++,Qt)?
行動的手動路徑是ALT+TAB打開Windows 任務切換然後定位並導航到所需的應用程序圖標,最終使其活動程序窗口的前景。或者,通過Task Bar導航。
AutoHotkey有一個功能WinActivate,它可以實現我想要的功能。
我想讓我的GUI用戶(GI用戶?)直接切換到已知的友好應用程序,例如,通過鍵盤快捷鍵。理想情況下,我的應用程序會要求OS/Windows按名稱或主窗口標題字符串「XYZ」顯示應用程序。如何切換到Windows上的其他應用程序(使用C++,Qt)?
行動的手動路徑是ALT+TAB打開Windows 任務切換然後定位並導航到所需的應用程序圖標,最終使其活動程序窗口的前景。或者,通過Task Bar導航。
AutoHotkey有一個功能WinActivate,它可以實現我想要的功能。
下面的代碼在這裏工作沒有問題在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);
}
正在搜索WinActivate導致鏈接到WinAPI的GetForegroundWindow和SetForegroundWindow的AutoHotkey forum post。
BOOL WINAPI SetForegroundWindow(
_In_ HWND hWnd
);
然而,這是不是一個真正的解決方案還因爲它
後者的鏈接相當詳細,但作者似乎已經放棄。
如果應用程序確實是友好的,即兩者都在您的控制之下,更簡單的解決方案可能會使用通信套接字或共享庫,以允許其他應用程序自行啓動。
這似乎是棘手足夠 - 延遲調用:
QTimer::singleShot(2000,
this,
SLOT(toForeground())
);
這個插槽:
void MainWindow::toForeground()
{
qDebug() << SetForegroundWindow(this->winId());
}
這將顯示任務欄,不久突出的應用程序圖標。它不切換到應用程序。
Qt自己的activateWindow()
會產生更持久的閃爍任務欄圖標,但不會引發應用程序。
這已經嘗試之前:
後者建議:
showNormal();
raise();
activateWindow();
b在Windows 7 64位上使用Qt 4.8.1和MSVC++ 2010不適用於我。
下面是代碼,我想在其他問題也提到:
作者寫道
它總是將窗口前面,但重點是系統中的某處 :-(在某些其他應用程序中...
這個我可以確認。
謝謝,它的確如此。 [FindWindow doc](http://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx)。 – handle