我知道这听起来很邪恶,但我的意图根本不是这样的。
一个用户点击“延迟拍摄”,倒计时开始,在这段时间里,他们去聚焦另一个应用程序,然后在倒计时之后,用户希望我的应用程序能恢复焦点。
当SetForegroundWindow从PID X的应用程序运行时失败,而PID Y的应用程序是集中的。
这能把我的窗户往前推,但没能引起注意:
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);它将窗口设置为总是在顶部。但是焦点没有放在我的窗口里。然后把它设置为HWND_NOTOPMOST,尽管它不是最上面的,但它仍然没有焦点。在这些调用SetWindowPos之后,运行SetWindowPos不会有什么效果,是否存在窃取焦点的问题?
我尝试了以下几种方法的结合:
SwitchToThisWindowSetWindowPosShowWindowSetForegroundWindow但似乎想不出来。
我认为这必须成为可能的另一个原因是Mac允许与NSApplication activateIgnoringOtherApps:和Linux的允许它。我想要这个跨台。
最后,我打算使用HWND_TOPMOST方法,然后是GetWindowRect,然后是SetCursorPos,然后在pos 0,0向我的窗口发送一次单击,我真的不想这么做,因为在0,0可能有一些东西,不应该被自动点击。
发布于 2018-04-29 05:48:34
无论前台是哪个应用程序(比如任务管理器等),这都是可行的:
AllocConsole();
auto hWndConsole = GetConsoleWindow();
SetWindowPos(hWndConsole, 0, 0, 0, 0, 0, SWP_NOZORDER);
FreeConsole();
SetForegroundWindow(hWnd);发布于 2016-07-21 16:13:23
正如评论所言,SetForegroundWindow有时是故意无用的。基本上,有两种方法可以绕过限制:
有一些更聪明的魔术,以实现目标,而不直接点击窗口,你要激活。由于我对GUI不熟悉,我建议将代码直接注入到当前的前台窗口,并将前景右转。
此外,还有一些关于模拟的例子。
http://www.codeproject.com/Tips/76427/How-to-bring-window-to-top-with-SetForegroundWindo.aspx
https://stackoverflow.com/questions/32032548
复制相似问题