首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >盗取焦点,因为SetForegroundWindow做不到

盗取焦点,因为SetForegroundWindow做不到
EN

Stack Overflow用户
提问于 2015-08-16 06:41:40
回答 2查看 1.3K关注 0票数 3

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

一个用户点击“延迟拍摄”,倒计时开始,在这段时间里,他们去聚焦另一个应用程序,然后在倒计时之后,用户希望我的应用程序能恢复焦点。

SetForegroundWindow从PID X的应用程序运行时失败,而PID Y的应用程序是集中的。

这能把我的窗户往前推,但没能引起注意:

代码语言:javascript
复制
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE);

它将窗口设置为总是在顶部。但是焦点没有放在我的窗口里。然后把它设置为HWND_NOTOPMOST,尽管它不是最上面的,但它仍然没有焦点。在这些调用SetWindowPos之后,运行SetWindowPos不会有什么效果,是否存在窃取焦点的问题?

我尝试了以下几种方法的结合:

  • SwitchToThisWindow
  • SetWindowPos
  • ShowWindow
  • SetForegroundWindow

但似乎想不出来。

我认为这必须成为可能的另一个原因是Mac允许与NSApplication activateIgnoringOtherApps:和Linux的允许它。我想要这个跨台。

最后,我打算使用HWND_TOPMOST方法,然后是GetWindowRect,然后是SetCursorPos,然后在pos 0,0向我的窗口发送一次单击,我真的不想这么做,因为在0,0可能有一些东西,不应该被自动点击。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-29 05:48:34

无论前台是哪个应用程序(比如任务管理器等),这都是可行的:

代码语言:javascript
复制
AllocConsole(); 
auto hWndConsole = GetConsoleWindow();
SetWindowPos(hWndConsole, 0, 0, 0, 0, 0, SWP_NOZORDER);
FreeConsole();
SetForegroundWindow(hWnd);
票数 2
EN

Stack Overflow用户

发布于 2016-07-21 16:13:23

正如评论所言,SetForegroundWindow有时是故意无用的。基本上,有两种方法可以绕过限制:

  • 模拟键盘/鼠标
  • 获得特权

有一些更聪明的魔术,以实现目标,而不直接点击窗口,你要激活。由于我对GUI不熟悉,我建议将代码直接注入到当前的前台窗口,并将前景右转。

此外,还有一些关于模拟的例子。

http://www.codeproject.com/Tips/76427/How-to-bring-window-to-top-with-SetForegroundWindo.aspx

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32032548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档