2010-06-28 11 views
6

मैं ट्रैक करने में सक्षम होना चाहता हूं कि वर्तमान में कौन सा एप्लिकेशन पाइथन से अपने एक्स 11 डिस्प्ले पर केंद्रित है। इसका इरादा एक टाइमट्रैकिंग टूल में बांधना है ताकि मैं ट्रैक कर सकूं कि मैं अनुत्पादक होने में कितना समय व्यतीत करता हूं।मैं वर्तमान में केंद्रित एप्लिकेशन का पता कैसे लगा सकता हूं?

मैं पहले से ही http://thpinfo.com/2007/09/x11-idle-time-and-focused-window-in.html में इस कोड को मिला:

import Xlib.display 
display = Xlib.display.Display() 
focus = display.get_input_focus() 
print "WM Class: %s" % (focus.focus.get_wm_class(),) 
print "WM Name: %s" % (focus.focus.get_wm_name(),) 

हालांकि, यह मेरे लिए काम करने के लिए प्रतीत नहीं होता। जाहिर है, कोई फर्क नहीं पड़ता कि कौन सा एप्लिकेशन केंद्रित है, दोनों get_wm_class() और get_wm_name() बस कोई भी वापस नहीं करते हैं।

बेशक समाधान को इन सभी नए फंक्ड विंडो प्रबंधकों जैसे कंपिज़ और इस तरह के साथ काम करने की आवश्यकता है।

उत्तर

8

व्हाउ! मैं इसे बाहर अपने आप को लगा:

import Xlib.display 
display = Xlib.display.Display() 
window = display.get_input_focus().focus 
wmname = window.get_wm_name() 
wmclass = window.get_wm_class() 
if wmclass is None and wmname is None: 
    window = window.query_tree().parent 
    wmname = window.get_wm_name() 
print "WM Name: %s" % (wmname,) 
+0

तो, 'window.query_tree() वास्तव में क्या करता है? मैंने पाया है कि मैंने भी वांछित परिणाम प्राप्त करने के लिए इसका उपयोग किया है, लेकिन इसके पीछे का अर्थ/कार्य अभी भी मेरे लिए एक रहस्य है। पायथन Xlib दस्तावेज़ या तो बहुत मदद नहीं कर रहे हैं। – erb

0

एक कुछ हद तक अच्छे समाधान, विशेष रूप से करने के बजाय एक स्क्रिप्ट एक लंबे समय से चल अनुप्रयोग के लिए, _NET_ACTIVE_WINDOW संकेत नज़र रखने के लिए libwnck का प्रयोग करेंगे। (संकेत की परिभाषा के लिए ईडब्ल्यूएमएच विनिर्देश देखें।)

संबंधित मुद्दे

 संबंधित मुद्दे