2017-08-24 43 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()

相關問題