हम एक पुराने वीडियो गेम को बनाए रखते हैं जो डायरेक्टड्रा के साथ पूर्ण स्क्रीन 256-रंग ग्राफिक्स मोड का उपयोग करता है। समस्या यह है कि, पृष्ठभूमि में चल रहे कुछ एप्लिकेशन कभी-कभी सिस्टम चलते समय सिस्टम पैलेट को बदलने का प्रयास करते हैं, जिसके परिणामस्वरूप दूषित ग्राफिक्स होते हैं।"एक्सक्लूसिव" डायरेक्टड्रा पैलेट वास्तव में अनन्य नहीं है
हम (कभी-कभी) यह पता लगा सकते हैं कि यह WM_PALETTECHANGED संदेश को संसाधित करके होता है। कुछ अपडेट संस्करणों से पहले हमने लॉगिंग जोड़ा (बस विंडो शीर्षक/वर्ग/प्रक्रिया नाम लॉग करें), जिससे उपयोगकर्ताओं को अपमानजनक अनुप्रयोगों की पहचान करने और उन्हें बंद करने में मदद मिली। एमएसएन लाइव मैसेंजर एक आम अपराधी था।
समस्या तब खराब हो गई जब हमें पता चला कि विंडोज विस्टा (और 7) इसे "स्वयं ही" करता है। WM_PALETTECHANGED पैरामीटर CSRSS और डेस्कटॉप विंडो की तरफ इशारा करते हैं। विस्टा में, एक कामकाज जो अक्सर काम करता था वह किसी भी फ़ोल्डर (कंप्यूटर, दस्तावेज़ इत्यादि) को खोलना था और गेम चलाने के दौरान इसे खोलना था। हास्यास्पद लगता है, लेकिन यह ज्यादातर मामलों में - काम किया। विंडोज 7 में, इस कामकाज ने और भी काम नहीं किया। उपयोगकर्ताओं ने पाया कि कुछ सेवाओं को रोकना (विंडोज अपडेट और इंडेक्सिंग सेवा) ने कुछ कॉन्फ़िगरेशन पर समस्या का समाधान भी किया।
कुछ समय पहले मैंने समाधान खोजने की उम्मीद में यादृच्छिक चीजों की कोशिश करना शुरू कर दिया था। मैंने पाया कि डायरेक्टड्रा पैलेट (IDirectDrawPalette :: SetEntries का उपयोग करके) को सेट करने से पहले जीडीआई पैलेट (बनाएं/selectPalette का उपयोग करके) को दूषित होने के बाद पैलेट को पुनर्स्थापित कर देगा (WM_PALETTECHANGED हैंडलर)। SetSystemPaletteUse और प्राथमिक सतह पर SetPalette को कॉल करने में कुछ और मदद की। हालांकि, अभी भी एक कल्पित झिलमिलाहट है जब कोई एप्लिकेशन पैलेट चोरी करने की कोशिश करता है, जो विशेष रूप से फीड के दौरान प्रमुख होता है।
प्रश्न: क्या "असली" अनन्य पैलेट प्राप्त करने का कोई तरीका है, जो कि हमारे गेम को ध्यान में रखे जाने तक विंडोज पैलेट को बदलने वाले अन्य अनुप्रयोगों को पूरी तरह से अस्वीकार करता है?
धन्यवाद, हमारे उपयोगकर्ताओं के परीक्षण के लिए एक स्क्रिप्ट पोस्ट की गई है, देखते हैं कि कैसे यह अभ्यास में हमारे खेल के लिए काम करेगा। –
हाँ, काम करने लगता है :) धन्यवाद! –
यह एक संगतता शिम की तरह दिखता है जो माइक्रोसॉफ्ट ने उन ऐप्स के लिए रखा है जो पैलेट सही नहीं हैं। –