[Silverlight] Intégrer votre application Silverlight dans la TaskBar de Windows 7
Depuis la version 3 de Silverlight, il est possible d’exécuter des applications Silverlight en mode “Out Of Browser” autrement dit installer localement l’application et l’exécuter directement sur le poste client.
Cette fonctionnalité, bient que très pratique, était assez limité lorsque l’on voulait interopérer avec le système d’exploitation. Certes, Silverlight 4 a permis d’accéder au répertoire Documents de l’utilisateur et Silverlight 5 permettra de faire du P/Invoke mais, pour le moment, qu’avons nous ? Rien !
Enfin, jusqu’à la semaine dernière où Microsoft a mis à disposition un ensemble d’APIs, Native Extensions For Microsoft Silverlight, qui permettent (via l’interop COM, disponible depuis Silverlight 4) d’accéder/utiliser des fonctionnalités natives de Windows 7 comme:
- l’utilisation des capteurs
- l’utilisation de l’API “Speech” (Text to Speech et Speech To Text)
- l’accès aux périphériques portables (caméras, téléphones, lecteurs MP3, etc.)
- l’intégration avec la barre des tâches
- Etc.
Nous allons ainsi voir, au travers de ce post, comment profiter des ces nouvelles fonctionnalités pour intégrer votre application Silverlight (qui doit s’exécuter en mode “Out Of Browser” avec des privilèges élèvés) dans la barre des tâches de Windows 7.
La première chose à faire est d’installer le runtime qui permet d’interopérer avec le système d’exploitation. Comme on ne sait pas vraiment si l’utilisateur dispose de tous les éléments sur sa machine, il est possible de demander à l’application de lancer l’installation du runtime nécessaire, que celui-ci soit embarqué dans le XAP ou bien situé sur un serveur distant:
1: private static bool CheckRuntimeInstallation()
2: {
3: try
4: {
5: if (!Application.Current.HasElevatedPermissions || !AutomationFactory.IsAvailable)
6: {
7: return false;
8: }
9:
10: if (!Installer.CheckNESLInstalled(1, 0))
11: {
12: Installer.InstallNESL(new Uri("Setup/NESLSetup.msi", UriKind.Relative), false, true);
13: if (!Installer.CheckNESLInstalled(1, 0))
14: {
15: return false;
16: }
17: return true;
18: }
19: return true;
20: }
21: catch (Exception Ex)
22: {
23: return false;
24: }
25: }
Une fois cette étape terminée, il est alors possible de commencer à travailler avec la barre des tâches. La première chose possible est de créer une liste de tâches, accessibles directement lorsque l’utilisateur cliquera avec le bouton droit sur l’icone de l’application, dans la barre des tâches:
1: private static void BuildJumpList()
2: {
3: JumpListItem firstTask = TaskbarButton.Current.Jumplist.CreateJumpListItem(1);
4: firstTask.Title = "Créer une fiche cliente";
5: firstTask.Description = "Permet de démarrer l'application sur une nouvelle fiche cliente";
6:
7: firstTask.Category = "Tâches administratirve";
8:
9: JumpListItem secondTask = TaskbarButton.Current.Jumplist.CreateJumpListItem(2);
10: secondTask.Title = "Ouverture une fiche cliente";
11: secondTask.Description = "Permet d'ouvrir l'application sur une nouvelle fiche cliente";
12:
13: secondTask.Category = "Tâches administratirve";
14:
15: TaskbarButton.Current.Jumplist.SetJumpListItems(new JumpListItem[] { firstTask, secondTask });
16: }
A l’exécution, on constate que la JumpList comporte bien 2 nouveaux éléments:

Une autre des fonctionnalités que vous pouvez utiliser est la possiblité de rajouter des boutons dans la miniature qui apparait lorsque vous survolez l’icone dans la barre des tâches:

Si vous lancez votre application et que vous survolez son icône dans la barre des tâches, vous remarquerez que celle-ci contient 2 icones supplémentaires:

Seul hic, pour le moment, je n’ai pas trouvé comment intercepter le clic sur l’un de ces boutons mais je suis sur que cela viendra rapidement dans une prochaine version de l’API (ou alors si quelqu’un sait comment le faire, qu’il n’hésites pas à laisser un commentaire
)
Dernière fonctionnalité intéressante, le fait de pouvoir indiquer à l’utilisateur qu’une opération est en cours, à l’aide d’une barre de progression. Tradicitonnellement, ce genre d’action se fait dans l’interface graphique mais imaginer que l’utilisateur ait réduit votre application: à ce moment là, il ne peut plus savoir quand l’opération (potentiellement longue) se termine. Avec cette technique, vous pourrez ainsi le notifier de l’état d’avancement:

Si l’on part du principe que la valeur passée en paramètre provient d’un timer, d’un BackgroundWorker, etc., on peut imaginer que la barre de progression change de manière dynamique, dans la barre des tâches:

Voila pour ce petit tour d’horizon des fonctionnalités des Natives Extensions pour Silverlight. Bien sur, je n’ai couvert ici que la partie barre des tâches, il y a beacoup d’autres focntionnalités à voir mais je vous laisse les découvrir avec les exemples fournis !
A+
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :