2011-11-15 14 views
24

मैं विंडोज 7 टास्कबार के समान प्रभाव रखना चाहता हूं।
मैंने इस प्रश्न में देखा है: Keep Window Looking Active
यह बहुत अच्छा काम करता है लेकिन केवल तभी खिड़की का गैर-क्लाइंट क्षेत्र होता है।मैं एयरो को एक सीमाहीन खिड़की खींचने के लिए कैसे मजबूर कर सकता हूं जैसे कि यह सक्रिय था, भले ही यह नहीं है?

मेरी खिड़की सीमा-कम है और इसकी सामग्री (केवल एक काला पृष्ठभूमि) प्रदान की जाती है क्योंकि यह निष्क्रिय है, इससे कोई फर्क नहीं पड़ता कि मैं क्या करता हूं।

मैंने विंडोज 7 टास्कबार के रूप में अपनी खिड़की झंडे सेट की हैं लेकिन इससे मदद नहीं मिली है।

इस समय मेरा एकमात्र विचार सीमाओं के साथ आकर्षित करना है और बस उन्हें क्लिप करना है, क्या मैं चाहता हूं कि हासिल करने का एक बेहतर तरीका है?

संपादित करें 1:
कतरन काम नहीं किया, सीमाओं विंडो की सामग्री को निष्क्रिय विंडो के रूप में प्रस्तुत किया गया है कतरन के बाद। विंडोज 7 टास्क-बार कैसे काम करता है?

EDIT2:
अपने आप को बेहतर समझाने के लिए कुछ तस्वीरें जोड़ा जा रहा है, तो निम्न विंडो की सामग्री को एक काले रंग की पृष्ठभूमि है।

एक निष्क्रिय विंडो (सामग्री थोड़े अंधेरे प्रदान की गई है) है कि: Inactive window

एक सक्रिय विंडो है कि: खिड़की कोई क्लाइंट क्षेत्र सामग्री हमेशा निष्क्रिय विंडो के रूप में प्रदान की गई है है
Active window

हालांकि विंडोज़ टास्कबार को हमेशा सक्रिय विंडो के रूप में प्रस्तुत किया जाता है और इसमें कोई भी एनसी क्षेत्र नहीं होता है (कम से कम जासूस ++ के अनुसार)। यही वह है जिसे मैं नकल करने की कोशिश कर रहा हूं।

EDIT3:
मेरी हाल की खोजों को साझा करना। explorer.exe मुख्य विंडो फ्रेमलेस है और निम्न झंडे है: Explorer dwmapi.dll exported functions

यह DwmEnableBlurBehindWindow का उपयोग करता है, मुझे क्या करना बस के रूप में: Explorer image parameters

मैं एक्सप्लोरर की प्रक्रिया dwmapi.dll कार्यों निर्यात में डुबकी लगाई।
मैंने अनियंत्रित क्रमिक कार्यों की जांच की है और उनमें से कोई भी एरो ग्लास को सक्रिय के रूप में प्रस्तुत करने से संबंधित नहीं है।

क्या यह डीडब्लूएम नियम एक्सप्लोरर पर लागू नहीं हो सकता है?

+0

आप एक सीमा कम खिड़की निष्क्रिय है कैसे नोटिस करते हैं? – Dani

+0

कुछ तस्वीरें अधिक स्पष्ट होने के लिए जोड़ा गया। – Omer

+0

मैंने पिछले अनुच्छेद में लिखा था "यदि खिड़की में कोई ग्राहक क्षेत्र नहीं है तो सामग्री हमेशा निष्क्रिय विंडो के रूप में प्रस्तुत की जाती है", एक सीमा रहित खिड़की निष्क्रिय की तरह दिखाई देगी, भले ही यह सक्रिय हो। – Omer

उत्तर

2

ट्रिकी एक ..
एनसीआरेंडिंग पॉलिसी को "डीडब्ल्यूएससेटविंडोएट्रिब्यूट" एपीआई के साथ सक्षम करने के लिए सेट करें।
http://msdn.microsoft.com/en-us/library/windows/desktop/aa969524(v=vs.85).aspx

[DllImport("dwmapi.dll", PreserveSig = false)] 
    public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); 

    [Flags] 
    public enum DwmWindowAttribute 
    { 
     NCRenderingEnabled = 1, 
     NCRenderingPolicy, 
     TransitionsForceDisabled, 
     AllowNCPaint, 
     CaptionButtonBounds, 
     NonClientRtlLayout, 
     ForceIconicRepresentation, 
     Flip3DPolicy, 
     ExtendedFrameBounds, 
     HasIconicBitmap, 
     DisallowPeek, 
     ExcludedFromPeek, 
     Last 
    } 

    [Flags] 
    public enum DwmNCRenderingPolicy 
    { 
     UseWindowStyle, 
     Disabled, 
     Enabled, 
     Last 
    } 

    public static bool SetNCRenderingActive(IntPtr Handle) 
    { 
     int renderPolicy = (int)DwmNCRenderingPolicy.Enabled;    
     return (DwmSetWindowAttribute(Handle, (int)DwmWindowAttribute.NCRenderingPolicy, ref renderPolicy, sizeof(int) ) == 0); 
    }