2009-08-30 25 views
6

Linux上のフルスクリーンアプリケーションが動作しているかどうかをPythonで知ることは可能ですか? Xlibを使用して可能かもしれないと感じましたが、私は方法を見つけませんでした。フルスクリーンアプリケーションが実行されているかどうかを確認するには?

編集:フルスクリーンとは、フルスクリーンのゲームなどのアプリケーション以外は何も意味しません。

+0

"フルスクリーンアプリケーション"の意味を正確に決める必要があるかもしれません。それは他のウィンドウが見えないだけの画面をカバーするウィンドウですか?複数のモニタがある場合はどうなりますか? –

+0

ok、質問を編集しました。 –

答えて

3

は解決策を見つけた:

import Xlib.display 

screen = Xlib.display.Display().screen() 
root_win = screen.root 

num_of_fs = 0 
for window in root_win.query_tree()._data['children']: 
    window_name = window.get_wm_name() 
    width = window.get_geometry()._data["width"] 
    height = window.get_geometry()._data["height"] 

    if width == screen.width_in_pixels and height == screen.height_in_pixels: 
     num_of_fs += 1 

print num_of_fs 

これは私のために、通常1であるフルスクリーンウィンドウの数を出力します。フルスクリーンゲームをプレイしているとき2.

4

拡張ウィンドウマネージャのヒント標準であるEWMHをサポートしているすべてのウィンドウマネージャを使用している場合、これを実行するためのエレガントな方法があります(たとえば、ctypes経由でXlibに話す)。ルートウィンドウのプロパティ(hereを参照)は、アクティブなウィンドウがある場合はそれを示します。アクティブウィンドウの_NET_WM_STATEプロパティは、そのウィンドウがフルスクリーンの場合はを含む状態を記述するアトムのリストです。 (複数のモニターがある場合は、ウィンドウがアクティブでなくてもそのウィンドウの1つでフルスクリーンになることがありますが、ウィンドウがアクティブでなくてもフルスクリーンで表示される可能性があるケースがあると思います - それらをカバーする方法はないと思います全てのウィンドウに対して本質的に_NET_WM_STATEをチェックする必要はありません)。

+0

Xlib RootWindowマクロ(表示と画面を引数として使用)またはDefaultRootWindow(引数のみを表示)を使用します。彼らは基本的な呼び出しの点で彼らが拡張するものを忘れていますが、Xlibの.hファイルはあなたに伝えます。あるいは、Python xlib(このタスクのctypeよりも手軽で、IMHO)では、 'Display'オブジェクトの' screen'メソッドの '.root'属性です。 –

+0

どのように_NET_ACTIVE_WINDOWプロパティが表示されるのかわかりません。 –

+0

Python xlibでは、ウィンドウオブジェクトの 'get_property'または' list_properties'メソッドを使います。http://python-xlib.sourceforge.net/doc/html/python-xlib_toc.htmlを参照してください。例えば、 http://www.google.com/codesearch/p?hl=ja&sa=N&cd=2&ct=rc#0kgoha2gKhE/matchbox-window-manager-1.0/src/structs.h&q=%22_NET_ACTIVE_WINDOW%22%20file:%5C。 h $(MBAtomEnum)これらのマクロ/定数の数値のために(ちょうどカウントアップ;-)。 –

関連する問題