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

フォーカスの反転はOS固有です。

pygletはOS固有のウィンドウコントロールを提供しません。したがって、ほとんどの場合、迅速で汚いソリューションにはアドホックトリックを使用するか、Windows APIやCOMを使用してpywin32などの拡張機能を使用してアプローチし、タスクバーアプリケーションのスタックを一覧表示してフォーカスの盗用を元に戻す必要があります。コンテキストをpygletに委任するために、最初に独自のウィンドウ(コンテナー-操作可能)を作成することもできます。

焦点の盗みを遅らせる

一方、プログラムロジックに従って、アプリケーションの実際の表示を遅らせたい場合は、可視性で遊ぶことができます。

import pyglet

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

したがって、ウィンドウコンテキストの委任で遊びたくない場合は、おそらく次のことを行うことができます。

  1. ウィンドウを表示せずにアプリケーションを起動します
  2. ハンドル/IDを取得して、現在アクティブなウィンドウのフォーカスを見つけます
  3. ウィンドウを表示する
  4. 前のウィンドウにフォーカスを戻す

上記は、WindowsAPIでの作業を前提としています。MSDNにはフォーカス変更の例があったと思います。現在のウィンドウ(メインアプリケーション)のPIDがわかっている場合は、これで手順2が簡略化されます。

于 2012-12-15T14:50:29.000 に答える