2017-08-24 21 views
0

私のpythonスクリプトでは、リモートイベント(lirc)アプリケーションに依存する実際のアクティブなウィンドウ/アプリケーションを特定する必要があります。だから私はhereのようにそれを再考しようとしました。しかし、この出力のテスト・コードwnck(python)でアクティブなウィンドウ/アプリケーションを特定できません

import wnck, time 

run = True 
while run: 
    try: 
     time.sleep(1) 
     screen = wnck.screen_get_default() 
     #screen.force_update() 
     print screen.get_active_window().get_name() 
     print screen.get_previously_active_window() 
    except KeyboardInterrupt: 
     run = False 

結果

.lirc : python — Konsole 
None 
.lirc : python — Konsole 
None 
.lirc : python — Konsole 
None 
.lirc : python — Konsole 
None 
.lirc : python — Konsole 
None 

私は別のウィンドウに切り替えても。したがって私は実行を繰り返し、time.sleep(1)でそれを遅らせました。リモートイベント(lirc)によって実行される結果は同じです。 Pythonシェル内でのみ動作するように継ぎ目があります(screen.get_previously_active_window()には正しい結果があります)。このスクリプトは、Kubuntu 16.04のターミナルウィンドウ(konsole)内で実行されています。私はscreen.force_update()を挿入しようとしましたが、成功しませんでした。

私は間違っていますか?

ありがとうございました

答えて

0

私はXlibでこれを解決しました。これは独立して動作します。例コードは次のとおりです。

import Xlib 
import Xlib.display 
import time 

run = True 
while run: 
    try: 
     time.sleep(1) 

     display = Xlib.display.Display() 
     root = display.screen().root 
     windowID = root.get_full_property(display.intern_atom('_NET_ACTIVE_WINDOW'), Xlib.X.AnyPropertyType).value[0] 
     window = display.create_resource_object('window', windowID) 

     print window.get_wm_name() 
     print window.get_full_property(display.intern_atom('_NET_WM_PID'), Xlib.X.AnyPropertyType).value[0] 
     print window.get_full_property(display.intern_atom('_NET_WM_NAME'), Xlib.X.AnyPropertyType).value[0] 
     print window.get_full_property(display.intern_atom('_NET_WM_VISIBLE_NAME'), Xlib.X.AnyPropertyType) 
     print window.get_wm_class() 
    except KeyboardInterrupt: 
     run = False 

ウィンドウに関する情報が表示されます。最後のスクリプトではwindow.get_wm_class()を使用しています。

関連する問題