gpt4 book ai didi

winapi - 窃取焦点,因为 SetForegroundWindow 做不到

转载 作者:行者123 更新时间:2023-12-01 13:50:34 25 4
gpt4 key购买 nike

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

用户点击“延迟拍摄”并开始倒计时,在此期间他们将焦点转到另一个应用程序,然后在倒计时之后用户希望我的应用程序收回焦点。

SetForegroundWindow 从 PID X 的应用程序运行而 PID Y 的应用程序获得焦点时失败。

这使我的窗口向前移动,但没有获得焦点:

SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

它将窗口设置为始终在顶部。但是焦点没有放在我的窗口中。然后将其设置回 HWND_NOTOPMOST 将其保留在那里,即使它不是最上面的,但它仍然没有焦点。在对 SetWindowPos 的这些调用之后运行 SetForegroundWindow 将无法解决问题 是否有任何方法可以窃取焦点?

我尝试了以下组合:

  • SwitchToThisWindow
  • 设置窗口位置
  • 显示窗口
  • 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);

关于winapi - 窃取焦点,因为 SetForegroundWindow 做不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32032548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com