Makale Özeti

Bu yazımıda Windows 7 ile beraber gelen Taskbar özelliklerinden Ikon Overlay ve Progress yeniliklerini kendi uygulamalarımıza nasıl ekleyebileceğimize göz atıyoruz.

Makale

Windows 7'nin RTM olduğu bugünlerde artık yeni hazırladığımız uygulamalarda da Windows7'nin özelliklerinden faydalanmanın zamanı geldi. Önümüzdeki günlerde sizlerle Windows7 tarafında farklı yenilikleri teknik detaylar ile paylaşacağım. Bugün bu ilk makalemizde hızlı bir giriş yapalım. Umarım yazılar faydalı olur.

Windows 7 ile beraber gelen farklı özelliklerin C# veya VB gibi managed diller ile kullanımı için ilk olarak gerekli olan managed wrapperları bilgisayarımıza indiremeliyiz. http://code.msdn.microsoft.com/WindowsAPICodePack adresinden indirebileceğiniz CodePack içerisinde yer alan wrapper'lar bizim rahatlıkla Windows7 API'larına C# veya VB ile ulaşabilmemizi sağlayacaktır. İndirdiğiniz paket içerisinde WindowsAPICodePack adında bir Visual Studio solution dosyası bulacaksınız. Söz konusu projeyi Visual Studio ile açıp kaynak kodlarını inceleyebilir ve derleyebilirsiniz. Derleme işlemi sonrasında Windows 7'nin farklı özellikleri için farklı wrapper DLL'leri kullanımımıza hazır olacak.

Taskbar'da Overlay Ikon Kullanımı

Windows 7 ile beraber gelen görsel anlamdaki en önemli özelliklerden biri alıştığımız Taskbar yapısının ciddi şekilde değişiyor olması. Yeni yapı ile beraber kullanıcılara taskbar üzerinden anlık olarak çok daha fazla bilgi aktarma şansımız oluyor. Örneğin eskiden sadece notification bölümünde gösterebildiğimiz veya özel uyarı mesajları çıkardığımız durumlara ait görsel değişiklikleri artık doğrudan Taskbar'da uygulama ikonu üzerine ek bir ikon ekleyerek kullanıcılara yansıtabiliyoruz. Bu etkileşimi kullanan uygulamalara bir örnek olarak Outlook'u ele alabiliriz. Outlook içerisinde herhangi bir mesaj geldiğinde artık taskbardaki outlook ikonunun yanında bir de mail ikonu görebiliyoruz. Böylece Outlook herhangi bir ek mesaj penceresi vs açmadan aslında kullanıcıyı rahatlıkla durumdan haberdar edebiliyor.

Taskbar içerisinde Overlay İkon gösterimi.
Taskbar içerisinde Overlay İkon gösterimi.

Biz de uygulamalarımızda bu tür ikonlar göstererek kullanıcıları farklı durumlardan haberdar edebiliriz. O nedenle gelin bu gibi ikonları Taskbar'da göstermenin yolunu beraberce inceleyelim.

İlk olarak hemen Taskbar ile ilgili wrapper DLL'lerimizi yeni yaratacağımız bir WPF projesine referans almamız gerekiyor. Taskbar özelliklerini kullanabilmeniz için Microsoft.WindowsAPICodePack.dll ve Microsoft.WindowsAPICodePack.Shell.dll'i referens almanız yeterli olacaktır. Ayrıca WPF tarafından System.Drawing sınıfını da referans almayı unutmayın. Sonraki adımda herhangi bir ikon (*.ico) dosyasını projenize sağ tuş ile tıklayarak "Add Existing Item" seçeneği ile ekleyin ve dosyanın Build Action'ını da "Resource" olarak ayarlayın. Böylece artık uygulamamız içerisinde bir ikon dosyamız var ve yeri geldiğinde bu dosyanın taskbarda gözükmesini sağlamamız gerekiyor.

Örnek olması amacı ile uygulama ekranın bir düğme yerleştirin ve düğmenin Click durumuna da aşağıdaki kodu yazalım.

[VB]

        Dim ikon = New System.Drawing.Icon(Application.GetResourceStream(New Uri("light.ico", UriKind.RelativeOrAbsolute)).Stream)

        TaskbarManager.Instance.SetOverlayIcon(ikon, "Uygulamanın bir fikri var!")

Kod içerisinde de görebileceğiniz üzere aslında işlem oldukça basit. İlk olarak projemize eklediğimiz ico dosyasını bir Resource olarak Application.GetResourceStream ile alıyoruz. Aldığımız bu stream'den bir ikon yarattıktan sonra wrapper sınıflarımız içerisinde SetOverlayIcon metodunu kullanmamız yeterli oluyor. Söz konusu metod toplamda iki parametre ile rahatlıkla çalışabilir durumda. İlk parametre malum ikonunumuz ikincisi ise screen reader uygulamaları tarafından ikon gösterildiğinde okunacak olan metin.

Uygulamamızın bir fikri var! Ampül yanıyor!
Uygulamamızın bir fikri var! Ampül yanıyor!

Yukarıdaki ekran görüntüsünde de inceleyebileceğiniz üzere istediğimiz zaman taskbar'da bu şekilde overlay ikonlar gösterebiliyoruz. Böylece kullanıcılar uygulamamız arka planda çalışırken bu ufak mesajlar ile uygulamamızın durumundan veya uygulamamıza yaptırdıkları herhangi bir işlemin durumundan haberdar olabilirler.

Taskbar'da Progress Gösterimi

Varsayalım ki bir programa uzun bir işlem yaptırıyoruz ve sürekli ne zaman biteceğinin merakı ile yanıp kavruluyoruz :) Aslında bu durum en sık internetten birşey indirirken başımıza gelmez mi? Download ettiğimiz o dosyanın ne kadarının bilgisayarımıza inmiş olduğunu kontrol etmek için sürekli gidip download penceresine bakarız. Oysa keşke bunun çok daha basit bir yolu olsaydı diyorsanız artık Taskbar üzerinde de Progress gösterebileceğimizin müjdesini veriyorum.

Şu anda hemen Windows7 üzerinde testini yapabileceğiniz uygulama Internet Explorer'ın ta kendisi. Eğer Internet Explorer ile bir download işlemi başlatırsanız Taskbar'da download işleminin ne kadarının bitmiş olduğunu gösteren bir progressBar göreceksiniz.

Internet Explorer ile download yaparken...
Internet Explorer ile download yaparken...

Ne kadar basit ve bir o kadar işlevsel değil mi? Yukarıda gördüğünüz görüntü sayesinde download esnasında sürekli Internet Explorer'a gidip durum kontrolü yapmaktan kurtuluyoruz. Peki biz kendi programlarımızda acaba bu işlevselliği nasıl sunarız?

Her zamanki gibi yeni bir WPF uygulaması yaratarak Microsoft.WindowsAPICodePack.dll ve Microsoft.WindowsAPICodePack.Shell.dll'i referans olarak projemize ekledikten sonra sahneye hemen deneme amaçlı bir düğme koyalım. Söz konusu düğmeye her basıldığında elimizdeki bir Progress değişkenini arttırdığımızı düşünelim.

[VB]

    Dim Progress As Integer = 0

    Private Sub btnTikla_Click(ByVal sender As Object, ByVal e As System.Windows.RoutedEventArgs) Handles btnTikla.Click

        Progress += 10

        TaskbarManager.Instance.SetProgressValue(Progress, 100)

    End Sub

Yukarıdaki kod örneğinizde tamamen deneme amaçlı olarak yarattığımız Progress değişkeni düğmeye her basıldığında ilerleyen bir süreci temsil ediyor. Söz konusu süreci Taskbar'a yansıtmak için SetProgressValue metodunu kullanıyoruz. Metodumuzun aldığı ilk parametresi göstermesi gereken Progress'in değeri, ikinci parametres ise maksimum verilebilecek Progress değerinin ta kendisi. Aslında işlem bu kadar basit fakat ek olarak isterseniz Progress ile ilgili ek bilgiler aktarmak adına Progress görselinin rengini de kısmen değiştirebilirsiniz. Örneğin belki de süreç kullanıcı tarafından veya bir hata nedeniyle durmuştur? Bu durumda kullanıcıyı yine Taskbar üzerinden uyarabilir miyiz acaba?

Taskbar Progress'de farklı State kullanımları.
Taskbar Progress'de farklı State kullanımları.

Taskbar'da Progress gösterirken Progress'in ayrıca nasıl gösterileceği ile ilgili ek bir ayar daha yapabilirsiniz. Bu ayarın adı da State. Böylece Progress'in bekleme durumunda olduğunu veya hata verdiğini veya belki de Progress'in belirsiz olduğunu ve ne zaman biteceğini bilmediğinizi kullanıcıya belirtebilirsiniz.

[VB]

            TaskbarManager.Instance.SetProgressState(TaskbarProgressBarState.Indeterminate)

Yukarıda gördüğünüz kod basit bir şekilde Taskbar'daki Progress'in belirsiz olduğunu belirterek Indeterminate State'e geçiş yaptırıyor. Böylece taskbardaki Progress sürekli aynı animasyon ile uygulama ikonunun arkasından geçecek ve uygulamanın bir işlem yaptığı fakat bitiş süresinin belli olmadığı kullanıcıya belirtilmiş olacakı. Bu şekilde farklı state'lerin görsellikteki değişikliklerini bir üstteki ekran görüntüsünde inceleyebilirsiniz.

Bir sonraki makalemizde Taskbar özellikleri ile devam edeceğiz.

Makalemizdeki örnek uygulamaların kodları.