2009-08-30 17 views
6

क्या यह पाइथन में यह संभव है कि लिनक्स पर एक पूर्ण स्क्रीन एप्लिकेशन चल रहा है या नहीं? मुझे लगता है कि एक्सलिब का उपयोग करना संभव हो सकता है लेकिन मुझे कोई रास्ता नहीं मिला है।कैसे बताना है कि एक पूर्ण-स्क्रीन एप्लिकेशन चल रहा है या नहीं?

संपादित करें: पूर्ण स्क्रीन से मेरा मतलब है कि पूर्ण स्क्रीन वाला एप्लिकेशन, लेकिन पूर्ण स्क्रीन गेम जैसे एप्लिकेशन को और कुछ नहीं।

+0

आपको यह तय करना पड़ सकता है कि "पूर्ण स्क्रीन एप्लिकेशन" से आपका क्या मतलब है। क्या यह सिर्फ एक खिड़की है जिसमें पर्याप्त स्क्रीन शामिल है कि कोई अन्य खिड़कियां दिखाई नहीं दे रही हैं? क्या होगा यदि एक से अधिक मॉनीटर हैं? –

+0

ठीक है, सवाल संपादित किया गया। –

उत्तर

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 

यह पूर्णस्क्रीन विंडो की संख्या जो मेरे लिए सामान्य रूप से एक है बाहर प्रिंट करता है। एक पूर्ण स्क्रीन गेम खेलते समय 2.

4

यदि सभी विंडो प्रबंधक आप EWMH के समर्थन में चलने में रुचि रखते हैं, तो विस्तारित विंडो प्रबंधक संकेत मानक, इसे करने के लिए सुरुचिपूर्ण तरीके हैं (उदाहरण के लिए एक्सटीब के माध्यम से एक्सलिब से बात करना)। रूट विंडो की संपत्ति (here देखें) आपको बताती है कि कौन सी विंडो सक्रिय है (यदि कोई है); सक्रिय विंडो की _NET_WM_STATE संपत्ति तब परमाणुओं की एक सूची है जो इसके राज्य का वर्णन करती है जिसमें _NET_WM_STATE_FULLSCREEN शामिल होगा यदि वह विंडो पूर्णस्क्रीन है। (यदि आपके पास कई मॉनीटर हैं तो एक विंडो सक्रिय होने के बिना उनमें से एक पर पूर्णस्क्रीन हो सकती है; मेरा मानना ​​है कि अन्य मामले मौजूद हो सकते हैं जिसमें एक विंडो सक्रिय होने के बिना पूर्णस्क्रीन हो सकती है - मुझे नहीं लगता कि उन्हें कवर करने का कोई तरीका है हालांकि, हर खिड़की के लिए अनिवार्य रूप से _NET_WM_STATE की जांच किए बिना)।

+0

आप Xlib रूटविंडो मैक्रो (डिस्प्ले और स्क्रीन के रूप में स्क्रीन) का उपयोग करते हैं या DefaultRootWindow (केवल तर्क के रूप में प्रदर्शित करें); मैं भूल जाता हूं कि वे अंतर्निहित कॉल के संदर्भ में क्या विस्तार करते हैं, लेकिन एक्सलिब की .h फाइलें आपको बताएंगी। या, पायथन xlib (इस कार्य के लिए ctype से अधिक आसान, IMHO) के साथ, यह 'प्रदर्शन' ऑब्जेक्ट की 'स्क्रीन' विधि की' .root' विशेषता है। –

+0

मुझे नहीं लगता कि मुझे इसकी _NET_ACTIVE_WINDOW संपत्ति कैसे मिलती है। –

+0

पायथन xlib में, विंडो ऑब्जेक्ट्स के 'get_property' या' list_properties' विधि का उपयोग करें - http://python-xlib.sourceforge.net/doc/html/python-xlib_toc.html और वहां से लिंक देखें। उदाहरण देखें http://www.google.com/codesearch/p?hl=en&sa=N&cd=2&ct=rc#0kgoha2gKhE/matchbox-window-manager-1.0/src/structs.h&q=%22_NET_ACTIVE_WINDOW%22%20file:%5C। उन मैक्रोज़/स्थिरांक के संख्यात्मक मानों के लिए एच $ (MBAtomEnum) (बस गिनें ;-)। –

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