我知道这听起来很邪恶,但我的意图根本不是这个。
用户单击“延迟射击”,然后开始倒计时,在此期间,他们将焦点移到另一个应用程序上,然后在倒计时之后,用户希望我的应用程序重新聚焦。
当SetForegroundWindow
从具有PID X的应用程序开始运行,而针对具有PID Y的应用程序运行时,失败。
这可以使我的窗口前进,但是并没有得到关注:
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);
它将窗口设置为始终位于顶部。但是,焦点没有放在我的窗口中。然后将其设置回
HWND_NOTOPMOST
,即使它不是最高级,也仍然留在那里,但是它仍然没有焦点。这些对SetForegroundWindow
的调用之后,运行SetWindowPos
不会成功。我尝试了以下组合:
SwitchToThisWindow
SetWindowPos
ShowWindow
SetForegroundWindow
但是似乎无法弄清楚。
我认为必须这样做的另一个原因是因为Mac OSX允许使用
NSApplication activateIgnoringOtherApps:
,而Linux允许使用。我想获得这个跨平台的平台。作为最后的选择,我将使用
HWND_TOPMOST
方法,然后使用GetWindowRect
然后使用SetCursorPos
并将单击发送到pos 0,0到我的窗口,我真的不想这么做,因为可能在0,0处有东西,应该不会被自动点击。 最佳答案
无论前景中有什么应用(例如任务管理器等),这始终有效:
AllocConsole();
auto hWndConsole = GetConsoleWindow();
SetWindowPos(hWndConsole, 0, 0, 0, 0, 0, SWP_NOZORDER);
FreeConsole();
SetForegroundWindow(hWnd);