【问题标题】:Prevent a Windows app from stealing the focus防止 Windows 应用程序窃取焦点
【发布时间】:2015-07-02 19:11:52
【问题描述】:

我已经在 C++ 中创建了一个 Windows 应用程序,并且我希望在我运行它时,它不会从当前聚焦的任何窗口中窃取焦点(或者可能会窃取焦点并立即将其归还)。我没有创建任何窗口,所以我不确定如何更改窗口样式,我的程序在后台运行。

我找不到任何适用于 C++ 的答案,有什么办法可以做到吗?

【问题讨论】:

  • My application stealing focus 的可能重复项
  • 您发现 C++ 的错误之处有哪些?
  • 我试过获取当前窗口句柄并将 EnableWindow() 设置为 false,也设置了 SetActiveWindow(),它们都不适合我
  • 程序运行得怎么样?
  • 处理键盘快捷键(Explorer?)的程序将获得焦点。对此您可能无能为力。

标签: c++ windows


【解决方案1】:

当您通过单击 EXE 或快捷方式启动应用程序时,Windows 资源管理器将获得焦点,而不是您的应用程序。启动您的应用且不让 Windows 资源管理器获得焦点的唯一方法是在 Windows 启动时通过注册表项启动您的程序。

【讨论】:

    【解决方案2】:

    确保在使用CreateWindowEx() 时使用扩展样式WS_EX_NOACTIVATESee the Microsoft Docs for CreateWindowEx.

    【讨论】:

    • 我已经在其他几个线程上看到了 WS_EX_NOACTIVATE,但我没有使用 CreateWindowEx(),我根本没有创建窗口...应用程序被隐藏并在背景,但它仍然从当前窗口中窃取焦点。我还编辑了问题以使其更清晰
    • 如果不创建窗口,焦点在哪里?它只是处于困境中?你打字,它就没有地方?这几乎看起来像是一个 Windows 错误。 ::GetActiveWindow() 和 ::GetFocus() 只返回 null 吗?很奇怪。
    猜你喜欢
    • 2012-07-02
    • 2011-11-04
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    相关资源
    最近更新 更多