首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ winAPI基础-通过windows切换

问C++ winAPI基础-通过windows切换
EN

Stack Overflow用户
提问于 2012-02-15 17:52:38
回答 2查看 1.8K关注 0票数 4

不太清楚该怎么解释。最基本的情况是,我正在寻找一种方法来更改当前的活动窗口(希望它是可以理解的)窗口,在该窗口中,文本是直接输入的。哇哦。

我已经发现的是msdn帮助和SetFocus()或SetActiveWindow( ),但是它并没有解决我的问题(或者,也可能,我只是错误地使用了它)。

简单地说:

代码语言:javascript
复制
HWND Dest = GetFocus();
... //Some moving around on the 'alt-tab level' :-|
SetFocus(Dest); 

不会再次将Dest窗口设置为活动。请原谅新手的问题,希望你不会花太多时间。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-15 18:03:03

SetFocus()不会将窗口带到顶部。它只是设置键盘焦点。

另一方面,SetActiveWindow()将特定的窗口放在顶部,但只有在调用它的应用程序也是拥有它的应用程序的情况下。(根据文件)。

当您说您确实尝试过SetActiveWindow()时,您是什么意思?它是怎么失败的?它产生了什么结果?

您可以尝试的另一个函数是SetForegroundWindow(),以防您想要激活属于另一个应用程序的窗口,但正如您在下面看到的(直接从文档中看到的),这有其问题:

系统限制哪些进程可以设置前台窗口。只有当下列条件之一为真时,进程才能设置前台窗口:

  • 这个过程就是前景进程。
  • 进程由前台进程启动。
  • 进程接收到最后一个输入事件。
  • 没有前台进程。
  • 前台进程正在调试。
  • 前景未被锁定(请参见LockSetForegroundWindow)。
  • 前台锁定超时已过期(请参阅SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo)。
  • 菜单没有活动。
票数 3
EN

Stack Overflow用户

发布于 2012-02-15 18:02:25

尝试使用SetForegroundWindow函数。

但是,请注意这方面有一些限制,在MSDN页面备注部分中已经解释了这些限制,我已经在这里复制了这些限制。

系统限制哪些进程可以设置前台窗口。只有当下列条件之一为真时,进程才能设置前台窗口:

  • 这个过程就是前景进程。进程由前台进程启动。
  • 进程接收到最后一个输入事件。
  • 没有前台进程。
  • 前台进程正在调试。
  • 前景未被锁定(请参见LockSetForegroundWindow)。
  • 前台锁定超时已过期(请参阅SPI_GETFOREGROUNDLOCKTIMEOUT in SystemParametersInfo)。
  • 菜单没有活动。

当用户使用另一个窗口时,应用程序无法将窗口强制到前台。相反,Windows会闪烁窗口的任务栏按钮以通知用户。

这意味着,如果您不拥有当前的前台进程(可能是当用户选择的时候),那么您就不能设置一个新的前台窗口。

周围有几个黑客(google SetForegroundWindow,你会发现它们),但它们是黑客,不是一个好主意--让用户决定前景是什么!(正如雷蒙德·陈在他的博客这里中解释的那样,黑客经常会导致程序挂起)。

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

https://stackoverflow.com/questions/9298574

复制
相关文章

相似问题

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