यह वास्तविक समस्या नहीं है। यदि आप अपनी प्रक्रिया को उच्च-डीपीआई के रूप में जानते हैं, तो सिस्टम अब किसी भी प्रकार का डीपीआई वर्चुअलाइजेशन नहीं करेगा और एपीआई अब वास्तविक मूल्यों के बारे में आपके साथ झूठ नहीं बोलेंगे।
विशेष रूप से, अगर आप एक उच्च डीपीआई अवगत आवेदन से GetWindowRect
या GetClientRect
कहते हैं, आप स्क्रीन में वास्तविक मूल्य मिलेगा निर्देशांक। यह न केवल आपके आवेदन की प्रक्रिया से संबंधित खिड़कियों के लिए, बल्कि अन्य प्रक्रियाओं से संबंधित खिड़कियों के लिए भी सही होगा, भले ही अन्य प्रक्रिया की डीपीआई जागरूकता सेटिंग के बावजूद।
विंडोज 8.1 के अनुसार, PhysicalToLogicalPoint
और LogicalToPhysicalPoint
फ़ंक्शन अब आवश्यक नहीं हैं और वास्तव में कुछ भी नहीं करते हैं। इन दोनों कार्यों के लिए दस्तावेज़ स्पष्ट रूप से ऐसी बाहर कॉल:
Windows 8.1 में, सिस्टम और अंतर-प्रक्रिया संचार के अतिरिक्त वर्चुअलाइजेशन मतलब यह है कि आवेदन पत्र के बहुमत के लिए, आप इन API जरूरत नहीं है। नतीजतन, विंडोज 8.1 में, PhysicalToLogicalPoint
और LogicalToPhysicalPoint
अब अंक परिवर्तित नहीं करते हैं। प्रणाली अपने सभी समन्वय अंतरिक्ष में एक आवेदन के लिए सभी अंक देता है।
आखिरी वाक्य मैंने ऊपर जो कहा है उसे phrasing का एक अलग तरीका है। सिस्टम कॉलर के डीपीआई जागरूकता के अनुसार मान देता है। यदि आपकी प्रक्रिया उच्च-डीपीआई जागरूक है, तो आपको वास्तविक मूल्य मिलेंगे। आपको मूल्यों को स्वयं स्केल करने की आवश्यकता नहीं है। यदि आप उच्च-डीपीआई नहीं जानते हैं, तो आप वास्तविक मूल्यों के बारे में झूठ बोलने के अधीन हैं। लेकिन यह समझ में आता है, क्योंकि यह माना जाता है कि आप सत्य को संभाल नहीं सकते हैं और उचित प्रतिक्रिया नहीं देंगे।
प्रथम स्तर है:
बस स्पष्ट होना, मैं वास्तव में Windows 8.1 के रूप में अब कर रहे हैं कि उच्च डीपीआई जागरूकता के दो स्तर, (और Windows 10 में जारी) का कहना है चाहिए , उच्च-डीपीआई जागरूकता के विंडोज विस्टा के साथ वापस रास्ता पेश किया। यह एप्लिकेशन की मेनिफेस्ट फ़ाइल में true
की सेटिंग द्वारा इंगित किया गया है, और इसका मतलब यह है कि आप (एप्लिकेशन) सिस्टम डीपीआई से निपटने में सक्षम है जो 96 डीपीआई के क्लासिक डिफ़ॉल्ट के अलावा कुछ और सेट है।
उपर्युक्त ज्ञान के आधार पर, हम जानते हैं कि यदि इस डीपीआई-जागरूकता सेटिंग के साथ एक प्रक्रिया एक एपीआई फ़ंक्शन को कॉल करती है जो स्क्रीन निर्देशांक लौटाती है, तो यह सिस्टम डीपीआई के संदर्भ में मान प्राप्त करेगी।
फिर प्रति-मॉनीटर उच्च-डीपीआई जागरूकता के विंडोज 8.1 के साथ पेश किया गया नया स्तर है। यह एप्लिकेशन के मैनिफेस्ट में True/PM
की सेटिंग द्वारा इंगित किया गया है, और इसका मतलब है कि आप (एप्लिकेशन) विभिन्न डीपीआई सेटिंग्स वाले विभिन्न मॉनीटर से निपटने में सक्षम हैं। दूसरे शब्दों में, जबकि अभी भी एक सिस्टम डिफ़ॉल्ट डीपीआई है (और यह 96 डीपीआई हो सकता है या यह कुछ और हो सकता है), ऐसे सिस्टम से जुड़े मॉनीटर हो सकते हैं जो एक अलग डीपीआई सेटिंग (सिस्टम डीपीआई के अलावा कुछ और) का उपयोग करते हैं।
फिर से, उपरोक्त समझ के आधार पर, हम जानते हैं कि यदि प्रति-मॉनीटर उच्च-डीपीआई जागरूकता वाली एक प्रक्रिया एक एपीआई फ़ंक्शन को कॉल करती है जो स्क्रीन निर्देशांक देता है, तो यह मॉनिटर के डीपीआई के सापेक्ष वास्तविक निर्देशांक प्राप्त करेगा प्रश्न में खिड़की है।
अपनी प्रक्रिया बिल्कुल भी ध्यान रखें (प्रकट में कोई सेटिंग, या false
), तो जब आप एपीआई कार्यों है कि स्क्रीन निर्देशांक लौट कहते हैं, आप निर्देशांक प्राप्त होगा डीपीआई नहीं है, तो/आभासी एक प्रणाली के आधार पर पहुंचा 96 डीपीआई के पूरे डीपीआई।
स्रोत
2016-06-15 07:50:03
मुझे यह विश्वास करना बहुत मुश्किल लगता है कि 'GetWindowRect' मान लौटाता है जो इस पर निर्भर करता है कि अन्य ऐप्स वर्चुअलाइज्ड हैं या नहीं। क्या वास्तव में मामला है? और क्या आप एक शीर्ष स्तरीय खिड़की या एक बच्चे की खिड़की के रेक्ट के लिए पूछ रहे हैं? आप इस आयत के साथ क्या कर रहे हैं? –
असल में मैंने इसे स्वयं से बाहर किया, मुझे DWMWA_EXTENDED_FRAME_BOUNDS के साथ पैरामीटर के रूप में DwmGetWindowAttribute को कॉल करना होगा। और हाँ यह इस तरह व्यवहार करता है, दोहराने के लिए काफी आसान है, एक डीपीआई जागरूक एप्लिकेशन बनाएं, अपने डीपीआई को> 144 पर सेट करें और इसे आजमाएं। मुझे लगता है कि इस तरह व्यवहार करने के लिए यह समझ में आता है क्योंकि वर्चुअलाइज्ड विंडो को यह एहसास नहीं होता है कि यह वर्चुअलाइज किया जा रहा है, और मूल्य अधिकांश प्रक्रिया के संदर्भ से आता है जो खिड़की से संबंधित है। –
मुझे लगता है कि यह प्रश्न फिर से खोलना चाहिए - मैं बंद होने के कारण से सहमत नहीं हूं। अब तक डेल उच्च डीपीआई डिस्प्ले के साथ नई डेल एक्सपीएस मशीनों को शिप करना शुरू कर रहा है। यह इस सवाल को विंडोज पर कई डेवलपर्स कोड लिखने के लिए प्रासंगिक बनाता है। विंडोज़ के साथ एक उच्च डीपीआई डिस्प्ले का उपयोग शुरू करने के बाद अधिकांश ऐप्स भयानक लगते हैं। इस क्षेत्र के आस-पास जितना अधिक समुदाय इनपुट होगा, उतना ही हम सभी इस नए खानभूमि के माध्यम से प्राप्त कर सकते हैं। –