मैंने एक ऐसी लाइब्रेरी बनाई है जो Windows 11 taskbar पर मेरे ऐप का UI दिखाने देती है
(github.com/airtaxi)हाल ही में मैंने एक ऐसी लाइब्रेरी जारी की है जो Windows 11 taskbar के अंदर सीधे ऐप UI एम्बेड कर सकती है। इसका नाम Deskband11Lib है, और इसे NuGet से इंस्टॉल करके आप WinUI 3 या WPF ऐप को taskbar widget में बदल सकते हैं।
मैं बताऊँगा कि इसे बनाने की ज़रूरत क्यों पड़ी, यह कैसे काम करती है, और फिर उस PoC widget तक बात ले जाऊँगा जिसे मैंने सच में Store पर भी प्रकाशित किया है।
पृष्ठभूमि: Windows 11 में गायब हुए deskbands
Windows 10 तक taskbar पर छोटे toolbars दिखाने की deskbands सुविधा मौजूद थी। Windows 11 में आते-आते यह फीचर पूरी तरह हटा दिया गया। मीडिया controls, system monitor, quick launch जैसी "हमेशा दिखने वाली छोटी widgets" को taskbar पर रखना चाहने वालों के लिए यह काफ़ी निराशाजनक बदलाव था।
प्रेरणा: zadjii का Deskband11
कुछ समय पहले मैंने GitHub पर zadjii/Deskband11 देखा, और उसका मुख्य approach वाकई शानदार लगा।
taskbar के ऊपर एक transparent WinUI 3 window रखना, उस window को
SetParentके जरिए taskbar के child HWND के रूप में जोड़ना, और फिर content के आकार के मुताबिक clip region सेट करना ताकि वह taskbar के हिस्से जैसा दिखे।
आख़िरकार यह "taskbar के ऊपर तैरती एक window" ही है, लेकिन यह idea बहुत स्मार्ट लगा। हालांकि मूल project खुद इसे "hackathon-level code" कहता था, और असली product में इस्तेमाल करने के लिहाज़ से उसमें कुछ कमियाँ थीं।
इसलिए मैंने इसे लाइब्रेरी के रूप में बनाया
यह idea बेकार न जाए, इसलिए मैंने इसे फिर से इस तरह बनाया कि कोई भी सिर्फ dotnet add package की एक लाइन से इसका इस्तेमाल कर सके।
- GitHub: https://github.com/airtaxi/Deskband11Lib
- NuGet:
Deskband11Lib.WinUI/Deskband11Lib.Wpf
इसका उपयोग आसान है
एक WinUI 3 window बनाइए और उसे TaskbarContentHost को दे दीजिए, बस।
var window = new MainWindow();
var host = new TaskbarContentHost(window, rootElement, new TaskbarContentHostOptions
{
PreferredWidth = 360,
PreferredHeight = 48
});
await host.AttachWhenLayoutReadyAsync();
window.Activate();
WPF में भी API लगभग वही है। taskbar alignment (left/center) detect करना, Start button और notification area के साथ overlap रोकना, Explorer restart होने पर recovery, और layout change animation तक — यह सब लाइब्रेरी अपने-आप संभाल लेती है।
इसे काम करने लायक बनाने में काफ़ी समय लगा
जब मैंने मूल code को वैसे ही चलाकर देखा तो वह चला तो सही, लेकिन window की position और size अजीब तरह से सेट हो रही थी। क्योंकि मूल code hackathon के दौरान लिखा गया था, शुरू में समझना मुश्किल था कि समस्या Windows 11 updates के बाद taskbar implementation बदलने से आई है या मूल code पहले से ही गड़बड़ था। दोनों वजहें संभव थीं, इसलिए taskbar की तरफ़ की चीज़ों को एक-एक करके खोलकर देखना पड़ा कि मौजूदा build में असल में सब कैसे काम कर रहा है। ऊपर से मूल project में Start button के center में होने या widget button जैसे elements का कोई ख़याल नहीं रखा गया था, इसलिए लाइब्रेरी बनाते समय इन चीज़ों पर नया काम करना पड़ा।
इसलिए मूल project से मैंने सिर्फ UI Automation के उपयोग का तरीका और window size/position संभालने वाले Win32 API वाले हिस्से का संदर्भ लिया, लेकिन खाली जगह की गणना करने वाला logic मैंने शुरू से फिर से लिखा। Start button, taskbar app button group, widget button और notification area की position पढ़कर बची हुई जगह निकालनी होती है। taskbar alignment left है या center, इसके हिसाब से खाली जगह बनने की जगह भी बदल जाती है, इसलिए इन पहलुओं को भी नए सिरे से ध्यान में रखना पड़ा।
मैंने सच में एक ऐप बनाकर Store पर प्रकाशित किया: BarPlay
मैं यह परखना चाहता था कि लाइब्रेरी वास्तव में उपयोगी है या नहीं, इसलिए मैंने इससे एक ऐप बनाया और Microsoft Store पर प्रकाशित किया। उसका नाम BarPlay है।
यह एक widget है जो taskbar पर अभी चल रहे media का thumbnail, title और controls दिखाता है। Spotify, browser, YouTube PWA app जैसे Windows System Media Transport Controls (SMTC) को support करने वाले सभी apps के साथ यह काम करता है। इसे NativeAOT से compile किया गया है ताकि startup speed और resource usage दोनों न्यूनतम रहें।
मैंने पहले अपने आसपास के लोगों को यह दिखाया, और प्रतिक्रिया काफ़ी अच्छी रही।
इसका उपयोग कहाँ हो सकता है
WinUI 3 या WPF से बनाया गया content बिना अलग window खोले भी हमेशा दिखने वाली जगह पर रखा जा सकता है। timer, media playback controls (BarPlay की तरह), build status या CI notifications, system monitor, quick launcher, account switching, या notification indicator जैसे use cases सोचे जा सकते हैं।
आप अपने ऐप के controls और style को ज्यों का त्यों रखते हुए उसे taskbar पर ला सकते हैं, इसलिए मेरा मानना है कि deskbands के हट जाने के बाद Windows 11 में इस तरह का अनुभव बनाने के लिए यह लगभग इकलौती .NET लाइब्रेरी है।
लिंक संग्रह
- Deskband11Lib (लाइब्रेरी)
- NuGet (WinUI)
- NuGet (WPF)
- BarPlay (Proof of Concept, Store)
- BarPlay (source code)
- मूल प्रेरणा (zadjii/Deskband11)
यह MIT license के तहत है, और आप sample projects (Deskband11Lib.WinUI.Sample, Deskband11Lib.Wpf.Sample) को कॉपी करके शुरुआत कर सकते हैं। feedback, issues और PR — सबका स्वागत है। अगर आप कोई दिलचस्प taskbar widget बनाते हैं, तो ज़रूर बताइए।
2 टिप्पणियां
ओह, आइडिया वाकई बहुत अच्छा है।
धन्यवाद! सच कहूँ तो मैंने बस इसे library के रूप में बनाया है, और मुझे लगता है कि इसका श्रेय मूल रूप से इसे बनाने वाले व्यक्ति के idea को जाता है..haha