2009-07-20 6 views
10

मैं लिनक्स सिस्टम पर स्क्रीन के संकल्प के साथ-साथ एक विशिष्ट विंडो (जिसमें एक प्रोग्राम चल रहा है) का संकल्प प्राप्त करने का प्रयास कर रहा हूं। मुझे संकल्प को संशोधित करने की आवश्यकता नहीं है, मुझे केवल वर्तमान मानों की आवश्यकता है। जहां तक ​​मुझे पता है, हम विंडोज़ पर ऐसा करने के लिए कुछ सिस्टम फ़ंक्शंस को कॉल कर सकते हैं, हम लिनक्स पर ऐसा कैसे कर सकते हैं, अधिमानतः सी/सी ++ भाषा का उपयोग कर? अग्रिम में धन्यवाद।प्रोग्रामिंग के लिए खिड़की के संकल्प और लिनक्स में सिस्टम का समाधान कैसे प्राप्त करें?

अद्यतन: वास्तव में, मुझे एक जीयूआई करने की आवश्यकता नहीं है, हालांकि मुझे पता है कि क्यूटी और जीटीके + इसे कर सकते हैं, मैं केवल संकल्प प्राप्त करने के लिए बाहरी पुस्तकालय शामिल करने में अनिच्छुक हूं।

+0

तो यह एक सांत्वना अनुप्रयोग है:

या, बेहतर, xdpyinfo विधि का उपयोग करें? एक्स के तहत नहीं चलते समय भी आपको उन मूल्यों की आवश्यकता है? – jmanning2k

+0

जीयूआई है, लेकिन जिस हिस्से पर मैं काम कर रहा हूं उसे एक की आवश्यकता नहीं है। इसे बाद में माप के लिए केवल उन मानों की आवश्यकता है। –

उत्तर

6

एक्स 11 में, आपको एक्सलिब के XGetWindowAttributes पर कॉल करने की आवश्यकता होगी ताकि विभिन्न विंडो जानकारी प्राप्त हो सके, जिसमें माता-पिता के सापेक्ष आकार और स्थिति शामिल हो। इसका उपयोग कैसे किया जाता है इसके उदाहरण के लिए, आप 'xwininfo.c' के लिए Google पर जा सकते हैं।

उस ने कहा, शायद आप अपनी खिड़की प्रोग्रामिंग करने के लिए कुछ और उच्चस्तरीय ढांचे का उपयोग करने जा रहे हैं - और संभावनाएं हैं कि इसके लिए पहले से ही कुछ अन्य प्राइमेटिव हैं, Qt के लिए एक उदाहरण देखें - तो आप दे सकते हैं प्रश्न के बारे में थोड़ा और पृष्ठभूमि।

0

कमांड लाइन उपकरण xdpyinfo यह जानकारी आपके लिए प्रदान करता है; इसे प्रोग्रामेटिक रूप से करने के लिए आपको Xlib का उपयोग करने की आवश्यकता है, क्योंकि एंड्रयू वाई बताता है।

6

निर्भर करता है:

  • आप कट्टर रहे हैं और आप Xlib उपयोग करना चाहते हैं, XDisplayWidth() और XDisplayHeight पर एक नजर है()।
  • आप क्यूटी 4 (मेरी प्राथमिकता) का उपयोग करते हैं, की कोशिश
     QApplication::desktop()->screenGeometry()
    (http://doc.qt.digia.com/4.0/qdesktopwidget.html देखें)
  • या जीटीके में, देखने के http://library.gnome.org/devel/gdk/stable/GdkScreen.html
+0

क्यूटी या जीटीके + एक विशिष्ट खिड़की के संकल्प प्राप्त कर सकते हैं? –

+0

मैं जीटीके के साथ विंडोज़ की एक सूची प्राप्त कर सकता हूं, लेकिन कोई नाम, आईडी या कुछ भी नहीं। कोई विशिष्ट विंडो की पहचान करने का कोई विचार नहीं है। आखिरकार एक्सलिब के लिए गया, और मेरी समस्या हल हो गई (हालांकि कोड थोड़ा घृणित दिखता है ...)। –

9

स्क्रीन रिज़ॉल्यूशन पाने के लिए आपको, विस्तार को उपयोग कर सकते हैं xrandr स्रोतों में की तरह:

SizeID  current_size; 
    XRRScreenSize *sizes; 
    dpy = XOpenDisplay (display_name); 
    // ... 
    root = RootWindow (dpy, screen); 
    sc = XRRGetScreenInfo (dpy, root); 
    current_size = XRRConfigCurrentConfiguration (sc, &current_rotation); 
    sizes = XRRConfigSizes(sc, &nsize); 
    for (i = 0; i < nsize; i++) { 
    printf ("%c%-2d %5d x %-5d (%4dmm x%4dmm)", 
     i == current_size ? '*' : ' ', 
     i, sizes[i].width, sizes[i].height, 
     sizes[i].mwidth, sizes[i].mheight); 
    // ... 
    } 

आप अपने xterm में आउटपुट टाइपिंग "xrandr" देख सकते हैं। , कोई जीयूआई होती है, तो

Display *dpy; 
// dpy = ... 
int scr = /* ... */ 
printf (" dimensions: %dx%d pixels (%dx%d millimeters)\n", 
     DisplayWidth (dpy, scr), DisplayHeight (dpy, scr), 
     DisplayWidthMM(dpy, scr), DisplayHeightMM (dpy, scr)); 
+0

रैंडर डिस्प्लेविड्थ/डिस्प्ले हाइट से अधिक विस्तृत है, लेकिन दोनों उपयोगी हैं (विभिन्न कारणों से)। – ephemient

+0

जहां तक ​​मुझे पता है, 'DisplayWidht'/'DisplayHeight' केवल वर्तमान स्क्रीन आकार सूचीबद्ध कर सकता है। वे सभी उपलब्ध स्क्रीन आकारों (प्रदर्शन मोड) सूचीबद्ध करने के लिए नहीं हैं। यही है 'एक्स्रांडर' या 'एक्सएफ 86 वीएम' के लिए हैं। – SasQ

+0

संक्षिप्त प्रश्न: क्या 'आकार' सरणी 'XRRConfigSizes' से लौटाई गई है (बाद में पता) को बाद में मुक्त करने की आवश्यकता है? या पुस्तकालय द्वारा आंतरिक रूप से आवंटित और प्रबंधित किया जाता है? मुझे दस्तावेज में इसके बारे में कुछ भी नहीं मिला (यदि कोई है, तो स्किम्पी मैनपेज से परे)। – SasQ

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