我知道这听起来很邪恶,但我的意图根本不是这个。

用户单击“延迟射击”,然后开始倒计时,在此期间,他们将焦点移到另一个应用程序上,然后在倒计时之后,用户希望我的应用程序重新聚焦。

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);
    

    10-07 13:37