2010-11-06 18 views
6

वहाँ एक रास्ता पता करने के लिए एक (linux एक्स विंडोज़) उपयोगकर्ता ऑल्ट-टैब या क्लिक के माध्यम से सक्रिय विंडो बदल जाता है जब है। मैं एक स्क्रिप्ट है कि इस घटना के लिए सुनता है (- जो मैं हल करने के लिए कैसे जानते हैं कि इस तरह की घटना होती है, तो स्क्रिप्ट तो मौजूदा सक्रिय विंडो को खोजने के लिए पर चला जाता है) लिखना चाहते हैं। मैं मौजूदा सक्रिय विंडो को खोजने के लिए मतदान भी कर सकता हूं लेकिन यह लिखने का एक बुरा तरीका है। एक समाधान प्राप्त करने की उम्मीद है जो "मतदान" के बजाय "सुन" सकता है।कब्जा परिवर्तन

धन्यवाद!

+0

आप एक जवाब मिला? –

उत्तर

1

बस संक्षेप में पर्ल मॉड्यूल X11 :: सबसे ऊपर के लिए प्रलेखन के माध्यम से देख इंगित करता है कि वहाँ एक monitor_property_and_structure_change विधि। मैं इस प्रकार अनुमान लगाता हूं कि अंतर्निहित X11 पुस्तकालय उस कार्यक्षमता को प्रदान करेंगे जो आप खोज रहे हैं।

0

मैं KTimeTracker केडीई प्रोग्राम है जो पटरियों कितना समय आप प्रत्येक विंडो में खर्च किया है के बारे में पता है। मैं विवरण के बारे में पता नहीं है - यह सक्रिय विंडो को बदलने की घटनाओं को ट्रैक करता है, या बस समय-समय पर पूरे डेस्कटॉप की स्थिति की जाँच करता है या नहीं। फिर भी, स्रोत उपयोगी हो सकते हैं: http://www.kde.org/applications/utilities/ktimetracker/

0

मुझे ऐसा करने की आवश्यकता थी और मेरा समाधान परिवर्तन के लिए रूट विंडो पर संपत्ति (विंडो प्रबंधक द्वारा बनाए रखा गया) देखना था।

यहाँ अजगर-Xlib कार्यान्वयन मैं किसी से यह प्रदर्शित करने के लिए लिखा था की एक प्रति है:

import Xlib 
import Xlib.display 

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

NET_ACTIVE_WINDOW = disp.intern_atom('_NET_ACTIVE_WINDOW') 
NET_WM_NAME = disp.intern_atom('_NET_WM_NAME') 

last_seen = {'xid': None} 
def get_active_window(): 
    window_id = root.get_full_property(NET_ACTIVE_WINDOW, 
             Xlib.X.AnyPropertyType).value[0] 

    focus_changed = (window_id != last_seen['xid']) 
    last_seen['xid'] = window_id 

    return window_id, focus_changed 

def get_window_name(window_id): 
    try: 
     window_obj = disp.create_resource_object('window', window_id) 
     window_name = window_obj.get_full_property(NET_WM_NAME, 0).value 
    except Xlib.error.XError: 
     window_name = None 

    return window_name 


if __name__ == '__main__': 
    root.change_attributes(event_mask=Xlib.X.PropertyChangeMask) 
    while True: 
     win, changed = get_active_window() 
     if changed: 
      print(get_window_name(win)) 

     while True: 
      event = disp.next_event() 
      if (event.type == Xlib.X.PropertyNotify and 
        event.atom == NET_ACTIVE_WINDOW): 
       break 

अधिक पूरी तरह से टिप्पणी की संस्करण this gist में है।

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