Programmare la Taskbar di Windows 7 usando .NET

La nuova barra (taskbar) di Windows 7, la trovo decisamente più comoda di quella di Vista/XP.

Cosa fa di nuovo la taskbar di Windows 7 ?

A questo link sulla documentazione MSDN trovate come funziona dal punto dell’utente finale e soprattutto le API Win32 relative per accedere alle funzionalità dalle vostre applicazioni.

Fondamentalmente la nuova taskbar integra la Quick LanchBar : lanciate l’applicazione( ad esempio IE)  e poi avete accesso alle istanze della stessa (le varie finestre/tab) del browser da uno stesso punto. Questo avviene in modo automatico se l’applicazione è in “qualche modo” pensava per la Taskbar di Win7 direttamente o indirettamente. Le nuove API win32 permetono proprio questo infatti: il poter sfruttare la taskbar e le relative funzionalità per l’utente finale da un’applicazione scritta da noi.

image 

Se andate sopra con il mouse ad una delle applicazioni che avete messo nella taskbar e premete il tasto destro, accedete a quella che viene chiamata Jump List, che contiene i dati acceduti di recente all’applicazione,  la possibilità di fare pin o meno dell’applicativo alla Taskbar etc.

image

Un altro aspetto interessante è la preview dei gruppi (tab) di un’applicazione, che si vede bene quando aprite più tab in IE8, come sotto:

image

Oppure il risultato delle progressbar vista in overlay sull’icona stessa mentre si fa il download di file:

image 

E se lo volessimo far fare anche per una nostra applicazione, ad esempio quando sta facendo un elaborazione un po’ lunga ?

Come programmarla  con .NET ?

Windows 7 mette a disposizione delle API Win32 per avere accesso da  un’applicazione alle funzionalità che vi ho raccontato sommariamente in precedenza. Però, come già in precedenza per Windows Vista esistevano dei Managed Wrapper per accedere a queste API nel caso vogliamo realizzare un’applicazione.NET .

In MSDN gallery trovate degli esempi già fatti che usano le Windows 7 Taskbar and Libraries .NET Interop Sample Library. Queste si basano sulla versione 1.4 modificata delle Windows Vista Bridge API.

Nella gallery trovate diversi esempi per le diverse funzionalità.

Progressbar di Windows 7

Se ad esempio volessimo visualizzare una progressbar che indica che la nostra applicazione sta facendo qualcosa di impegnativo, dobbiamo

1. Aggiungere le librerie per la gestione della taskbar di Windows 7, che sono quelle che vedete in figura:

image 

In questo caso basta chiamare l’API SetProgressValue, come nell’esempio di codice seguente

image

Ora il secondo e terzo parametro rappresentano la percentuale attuale e finale di completamento dell’operazione, il secondo valore andrà aggioranto via…via, nell’esempio che trovate in MSDN Gallery viene usato un timer per la simulazione. Il risultato è quello che vedete di seguito:

image

Se voglio visualizzare una situazione d’errore ecco come fare:

image

Ed il risultato:

image

Come ottenere l’Handle da WPF ?

Gli esempi che trovate su MSDN usano per lo più semplici Windows Forms, se volete usare WPF per ottenere le stesse funzionalità vi serve avere l’handle alla Window del sistema operativo.

Si può fare tramite le API di interop con Win32 di WPF:

image

A questo punto Handle è il valore che dovete usare nelle API della Taskbar di Windows 7, almeno per la Progress Bar.

Ci sono molte altre API, che potete usare anche da .NET tramite queste librerie:

image

Potete mettere in overlay icone, creare clip per vedere meglio la preview normalmente offerta da Windows 7.

Download