2 puan yazan kck4156 4 시간 전 | 2 yorum | WhatsApp'ta paylaş

Kısa süre önce, doğrudan Windows 11 görev çubuğunun içine uygulama arayüzü yerleştirebilen bir kütüphane yayımladım. Adı Deskband11Lib ve NuGet üzerinden kurulduğunda WinUI 3 veya WPF uygulamalarını görev çubuğu widget’larına dönüştürebiliyor.

Bunu neden yaptığımı, nasıl çalıştığını ve sonunda gerçekten Store’a eklediğim PoC widget’ına kadar her şeyi anlatacağım.


Arka plan: Windows 11’de kaybolan deskband’ler

Windows 10’a kadar görev çubuğunda küçük araç çubukları göstermeyi sağlayan deskband özelliği vardı. Windows 11’e geçişle birlikte bu özellik tamamen kaldırıldı. Medya kontrolleri, sistem izleme, hızlı başlatma gibi “her zaman görünen küçük widget”ları görev çubuğunda tutmak isteyenler için bu oldukça üzücü bir değişiklikti.

İlham: zadjii’nin Deskband11’i

Bir süre önce GitHub’da zadjii/Deskband11 projesini gördüm ve temel yaklaşım gerçekten harikaydı.

Görev çubuğunun üzerine şeffaf bir WinUI 3 penceresi yerleştirmek, bu pencereyi SetParent ile görev çubuğunun alt HWND’si yapmak, ardından içerik boyutuna göre kırpma alanı ayarlayarak sanki görev çubuğunun bir parçasıymış gibi görünmesini sağlamak.

Sonuçta bu “yalnızca görev çubuğunun üzerinde duran bir pencere” ama fikir gerçekten çok zekiceydi. Ancak orijinal proje kendisini “hackathon seviyesinde kod” olarak tanımlıyordu ve gerçek bir üründe kullanılabilmesi için eksikleri vardı.

Bu yüzden bunu bir kütüphaneye dönüştürdüm

Bu kadar iyi bir fikrin boşa gitmesini istemediğim için, herkesin tek satırlık dotnet add package komutuyla kullanabilmesi adına bunu yeniden kütüphane olarak tasarladım.

Kullanımı basit

Bir WinUI 3 penceresi oluşturup bunu TaskbarContentHost içine vermeniz yeterli.

var window = new MainWindow();  
var host = new TaskbarContentHost(window, rootElement, new TaskbarContentHostOptions  
{  
    PreferredWidth = 360,  
    PreferredHeight = 48  
});  
  
await host.AttachWhenLayoutReadyAsync();  
window.Activate();  

WPF tarafında da API neredeyse aynı. Görev çubuğu hizalamasını (sol/orta) algılama, Başlat düğmesi ve bildirim alanıyla çakışmayı önleme, Explorer yeniden başlatıldığında toparlanma ve düzen değişikliği animasyonları gibi işleri kütüphane otomatik olarak hallediyor.


Çalışır hale getirmek epey zaman aldı

Orijinal kodu olduğu gibi çalıştırdığımda açılıyordu ama pencerenin konumu ve boyutu tamamen yanlış ayarlanıyordu. Kod hackathon sırasında yazıldığı için mi böyleydi, yoksa Windows 11 güncellemeleriyle görev çubuğunun uygulanışı değiştiği için mi, ilk başta anlamak zordu. İkisi de sebep olabilir diye görev çubuğu tarafını tek tek inceleyip mevcut build’de gerçekte nasıl davrandığını doğrudan doğrulamaktan başka çare yoktu. Üstelik orijinal proje, Başlat düğmesinin ortada olduğu durumları ya da widget düğmesi gibi öğeleri hiç hesaba katmıyordu; kütüphaneleştirme sırasında bunlara ayrıca dikkat etmem gerekti.

Bu yüzden orijinal projeden yalnızca UI Automation kullanım biçimini ve pencere boyutu/konumunu ayarlayan Win32 API kısmını referans aldım; boş alanı hesaplayan mantığı ise en baştan yeniden yazdım. Başlat düğmesi, görev çubuğu uygulama düğmeleri grubu, widget düğmesi ve bildirim alanının konumunu okuyup kalan alanı bulmak gerekiyordu. Ayrıca görev çubuğu hizalamasının solda mı ortada mı olduğuna göre boş alanın oluştuğu yer de değiştiği için, bu durumları da yeni baştan ele almak gerekti.


Gerçekten bir uygulama yapıp Store’a yükledim: BarPlay

Kütüphanenin gerçekten kullanılabilir olup olmadığını görmek için bununla bir uygulama yapıp Microsoft Store’a koydum. Adı BarPlay.

Bu, görev çubuğunda o anda çalan medyanın küçük resmini, başlığını ve kontrollerini gösteren bir widget. Spotify, tarayıcılar, YouTube PWA uygulamaları gibi Windows System Media Controls (SMTC) desteği olan tüm uygulamalarla çalışıyor. Başlangıç hızını ve kaynak kullanımını en aza indirmek için NativeAOT ile derlendi.

Microsoft Store uygulama bağlantısı

Önce çevremdeki birkaç kişiye gösterdim ve tepkiler oldukça iyiydi.


Nerelerde kullanılabilir?

WinUI 3 veya WPF ile oluşturduğunuz içerikleri ayrı bir pencere açmadan, her zaman görünür bir konuma yerleştirebilirsiniz. Zamanlayıcılar, medya oynatma kontrolleri (BarPlay gibi), build durumu veya CI bildirimleri, sistem izleme, hızlı başlatıcılar ya da hesap değiştirme, bildirim göstergeleri gibi kullanım senaryoları düşünülebilir.

Kendi uygulamanızın kontrollerini ve stilini olduğu gibi taşıyarak görev çubuğuna yerleştirebildiğiniz için, deskband’lerin kaldırıldığı Windows 11’de bu deneyimi sunabilen neredeyse tek .NET kütüphanesi olduğunu düşünüyorum.


Bağlantılar

MIT lisanslı ve örnek projeleri (Deskband11Lib.WinUI.Sample, Deskband11Lib.Wpf.Sample) kopyalayarak başlayabilirsiniz. Geri bildirim, issue ve PR’lerin hepsi memnuniyetle karşılanır. Eğlenceli görev çubuğu widget’ları geliştirirseniz haber verin.

2 yorum

 
turtlehwan 4 시간 전

Vay, fikir gerçekten çok iyiymiş.

 
kck4156 4 시간 전

Teşekkürler! Aslında sadece kütüphaneleştirdim; bence bu, en başta yapan kişinin fikri sayesinde oldu.. hehe