5

我的 python 应用程序启动了一个创建 pyglet 窗口的子进程。当 pyglet 窗口打开时,它位于所有其他窗口的前面,并获得键盘焦点。我希望我的 pyglet 窗口在后台打开,而不是集中注意力。这可能吗?

我正在使用的代码的精简版本:

import pyglet

pyglet.window.Window()
pyglet.app.run() 

我正在使用 Windows 7,以防万一。

4

2 回答 2

1

我认为这可能比您的应用程序更像是一个窗口/窗口管理器问题 - 像这样的http://pcsupport.about.com/od/windowsxp/ht/stealingfocus02.htm有帮助吗?

于 2012-11-30T18:07:49.917 回答
1

反转焦点是特定于操作系统的:

pyglet不提供操作系统特定的窗口控制。因此,很可能您将不得不使用临时技巧来获得快速和肮脏的解决方案,或者尝试使用 pywin32 之类的扩展来处理它,使用 Windows API 和/或 COM 来列出任务栏应用程序堆栈以逆转焦点窃取。您还可以尝试先创建自己的窗口(容器 - 您可以操作) - 以便将其上下文委托给 pyglet。

延迟窃取焦点

另一方面,如果根据您的程序逻辑,您只想延迟应用程序的实际显示,您可以使用可见性:

import pyglet

w = pyglet.window.Window()
w.set_visible(False)
pyglet.app.run() 

因此,如果您不想使用窗口上下文委托,您可以执行以下操作:

  1. 在不显示窗口的情况下启动您的应用程序
  2. 通过获取当前活动窗口的句柄/id 找到当前活动窗口的焦点
  3. 显示你的窗口
  4. 将焦点返回到上一个窗口

以上假设使用 Windows API。我认为 MSDN 有关于焦点更改的示例。如果您知道当前窗口(主应用程序)的 PI​​D,这应该简化第 2 步。

于 2012-12-15T14:50:29.000 回答