2010-03-08 19 views
14

मैं WPF का उपयोग कर एप्लिकेशन जैसे "गैजेट" बनाने की कोशिश कर रहा हूं। लक्ष्य एक सामान्य विंडोज 7 गैजेट के रूप में समान व्यवहार प्राप्त करने के लिए है:डब्ल्यूपीएफ में विंडोज गैजेट - "डेस्कटॉप दिखाएं" दिखाएं

  • कोई कार्य-बार प्रवेश
  • दिखाई नहीं है, जब आप Alt + Tab खिड़कियों
  • नहीं हमेशा सबसे ऊपर, आवेदन कर सकते हैं शीर्ष
  • दर्शनीय जबकि प्रदर्शन 'एयरो पीक'
  • दर्शनीय का उपयोग करते समय 'डेस्कटॉप शो'/विंडोज + डी

मैं पहले चार गोवा को पूरा कर लिया है पर हो एलएस, लेकिन पांचवीं समस्या का समाधान खोजने में असमर्थ रहे हैं। निकटतम मैं आया हूं How do you do AppBar docking (to screen edge, like WinAmp) in WPF? से यूटिलिटी क्लास का उपयोग करके, लेकिन यह ऐप को "टूलबार" में बदल देता है, जिससे स्क्रीन के उस हिस्से से अनुप्रयोगों को गायब कर दिया जाता है जहां मेरा गैजेट जीयूआई रखा जाता है।

मैं देख सकता हूं कि पहले से ही स्टैकओवरफ्लो पर इसी तरह के प्रश्न पूछे गए हैं, लेकिन समाधान मिलने से पहले उन लोगों की मृत्यु हो गई है। आशा अब किसी को ज्ञान इस को हल करने के साथ वहाँ बाहर है कि वहाँ में वैसे भी पोस्ट कर रहा है =)

उत्तर

1

सत्य पर Topmost सेट करने का प्रयास है, और जब आपके आवेदन ध्यान केंद्रित खो देता है आप 0.

को अस्पष्टता सेट कर सकते हैं मैं इस किया था Xaml:

<Window x:Class="OpacTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Topmost="True" Background="Transparent" ShowInTaskbar="False" AllowsTransparency="True" WindowStyle="None" Width="400" Height="300"> 
    <Grid> 
     <Border Background="Black" CornerRadius="5" /> 
    </Grid> 
</Window> 

मैं खिड़की के लिए सी # में ऐसा किया:

protected override void OnActivated(EventArgs e) 
{ 
    base.OnActivated(e); 

    Opacity = 1; 
} 

protected override void OnDeactivated(EventArgs e) 
{ 
    base.OnDeactivated(e); 

    Opacity = 0; 
} 

यह आपको इस प्रक्रिया का हिस्सा हो जाता है; आपको यह जानने का तरीका चाहिए कि क्या डेस्कटॉप फोकस करता है या नहीं।

मुझे यकीन है कि आप डेस्कटॉप विंडो की WndProc घटना में शामिल होने और WM_ACTIVATE की तलाश करके ऐसा कर सकते हैं।

आप किए जा सकेंगे:

  • कॉल GetDesktopWindow डेस्कटॉप विंडो के संभाल पाने के लिए
  • एपी उपयोग/आह्वान कॉल WndProc
  • हैंडल WM_ACTIVATE या उचित खिड़कियों संदेश के लिए एक कॉलबैक स्थापित करने के लिए और सेट आपकी अस्पष्टता 1
+0

यह वास्तव में काम करता है। – Larry

1

आप एक्सबीएपी बनाकर WPF का उपयोग करके एक वास्तविक विंडोज गैजेट को कार्यान्वित कर सकते हैं। बस एक गैजेट.एक्सएमएल फ़ाइल और एक। एचटीएमएल फ़ाइल जोड़ें जिसमें केवल एक आईएफआरएएम है जो एक्सबीएपी लोड करता है। इस तरह आपका डब्ल्यूपीएफ एप्लीकेशन वास्तव में एक गैजेट होगा और स्वचालित रूप से सभी नियमों का पालन करेगा।

एक और विकल्प Windows Sidebar Styler का उपयोग करना है। इसके लिए आपके साथ अतिरिक्त सॉफ़्टवेयर स्थापित करने की आवश्यकता है, लेकिन आपको उन चीज़ों को करने की भी अनुमति मिलती है जो आप एक्सबीएपी सैंडबॉक्स के अंदर कोड हस्ताक्षर प्रमाणपत्र, उपयोगकर्ता प्राधिकरण, इत्यादि के बिना नहीं कर सकते हैं।

एक तीसरा विकल्प गैजेट बनाने के लिए है जो कुछ उपयोग करता है एचटीएमएल (जैसे एक विशेष पृष्ठभूमि रंग) में पहचानने योग्य, फिर जब आपका .exe शुरू होता है, तो एक्सप्लोरर के तहत एक एचडब्ल्यूएनडी के लिए स्कैन करें जिसमें आपके द्वारा देखे जा रहे गुण हैं, स्वयं को Explorer.exe प्रक्रिया में इंजेक्ट करें, और अपनी विंडो को सेट करें इसका एक बच्चा

तीसरे विकल्प का एक बदलाव एक्सप्लोरर.एक्सई में इंजेक्ट नहीं करना है बल्कि जेड इंडेक्स और एचडब्ल्यूएनडी के स्थान को ट्रैक करने के लिए अपने जेड इंडेक्स और स्थान (सेटविंडोपॉस का उपयोग करके) को बनाए रखना है।

तो कई विकल्प ...

0

एक समाधान प्राप्त करते हैं करने के लिए व्यवहार की तरह "गैजेट", अपने विंडो डेस्कटॉप के एक बच्चे को बनाने के लिए है। इस तरह, यदि आप विंडोज + डी दबाते हैं तो भी आपकी खिड़की डेस्कटॉप पर हमेशा दिखाई देती है। आप देख सकते हैं कि यह यहां कैसे किया गया है: Window "on desktop"

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