Welcome to my blog

Here, I talk about my projects, .Net, and work.

10 Oct, 13

Assurer la rétrocompatibilité dans une application Desktop utilisant les APIs WinRT


Bonjour/Bonsoir à toutes et à tous !

Récemment, dans deux de mes projets personnels, j’ai eu besoin d’utiliser des APIs WinRT dans une application bureautique. Avec quelques manipulations, ça fonctionne, mais je me suis très vite rendu compte que l’on perdait alors la rétrocompatibilité de l’application avec Windows Vista et 7. Je vais donc donner une petite astuce toute bête et très rapide qui permet d’assurer la rétrocompatibilité.

Pour cela vous aurez besoin :

– D’un projet type Application Windows.
– Du SDK Windows 8 ou 8.1 selon les APIs que vous souhaitez utiliser.
– 125gr de beurre.
– Et 2 œufs.

Configuration du projet

Tout d’abord, vous aurez besoin du fichier « Windows.winmd », fournit par le SDK de Windows 8/8.1. Vous trouverez ce fichier à l’emplacement suivant : « C:\Progam Files (x86)\Windows Kits\8.0 (ou 8.1)\References\CommonConfiguration\Neutral\Windows.winmd ».

Essayez d’ajouter ce fichier aux références de votre projet Application Windows, vous rencontrerez une erreur.

Résolvons le soucis : Déchargez votre projet dans Visual Studio, puis faîtes clic-droit sur le projet, Modifier le fichier de projet. Sous la ligne :

[csharp]<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>[/csharp]

Ajoutez la ligne :

[csharp]<TargetPlatformVersion>8.0</TargetPlatformVersion>[/csharp]

Rechargez le projet, puis essayez d’ajouter « Windows.winmd » aux références du projet; cette fois-ci, ça passe. Vous pouvez désormais utiliser les APIs WinRT dans un projet bureautique.

Le problème de compatibilité

C’est super de pouvoir utiliser les APIs WinRT, mais si on ne fait un petit peu attention, on perd bêtement la rétrocompatibilité du projet car ce fichier est exploitable exclusivement sous Windows 8 et 8.1, même avec une condition « Suis-je exécuté sous Windows 8? ». Cette rétrocompatibilité est perdue au moment ou notre programme tente de charger « Windows.winmd » en mémoire (rappelons que notre programme ne charge pas toutes les références à son démarrage).
Il y a UN unique point à retenir pour éviter de charger une référence avant d’en avoir réellement besoin : ne pas tenter par quelque moyen un accès à la Class contenant un membre susceptible de faire appel à cette fameuse référence.

Autrement dit : tant que vous n’instanciez pas ou n’appelez pas un membre statique d’une Class utilisant « Windows.winmd », celui-ci ne sera pas chargé, donc la rétrocompatibilité est assurée.

La solution

Du coup, vous l’aurez sûrement devinez, la solution est assez simple :

– Créez une Class « MyClassWinRT » qui sera chargé d’utiliser les APIs WinRT (de préférence non statique)
– Utilisez le code suivant, à l’extérieur de cette Class, pour tester si votre application tourne sous Windows 8 ou supérieur :
[csharp]private bool RunningOnWindows8OrHigher()
{
return (Environment.OSVersion.Version.Major == 6 && Environment.OSVersion.Version.Minor >= 2);
}[/csharp]

Voila, il ne reste plus qu’à exploiter la Class :

[csharp]private void OkButton_Click(object sender, RoutedEventArgs e)
{
if (RunningOnWindows8OrHigher())
{
var winRt = new MyClassWinRT();
winRt.ShowToas(); // Une fonction qui affichera un ToastNotifcation par exemple.
}
else
{
// Afficher une InfoBulle
}
}[/csharp]

C’est tout 🙂

Avec cette méthode, SoftwareZator 4.0 est capable, par exemple, de récupérer la liste des applications Windows Store installés, et la prochaine mise à jour de ClipboardZanager sera capable d’afficher des ToastNotifications tout en préservant la rétrocompatibilité avec Windows Vista et Windows 7.

Alternative

Une autre solution est possible, mais je l’apprécie beaucoup moins : chargez « Windows.winmd » au Runtime et utilisez les fonctions par réflexion. Ca vous évite de passer par une Class, mais le code devient beaucoup moins propre, voir dégueulasse ! A éviter donc 🙂

 

8 Août, 13

Veler Software, c’est fini, mais pourquoi?


C’est à la fois avec le sourire et un petit pincement au cœur que j’ai publié cet article et mon nouveau site internet ce matin, sur lequel je planchais depuis Février quand j’avais le temps, que vous découvrez actuellement. Et oui, comme vous le constatez, Veler Software, c’est fini ! Cette belle aventure aura durée 6 ans et 6 mois. Beaucoup se demanderons pourquoi un tel changement? Les explications sont ci-dessous.

Premier point : pourquoi?

Le changement, c’est maintenant ! Aussi brutal qu’une mouche écrasée ou qu’un câble Ethernet débranché par sa copine (je suis sûr que c’est déjà arrivé à certains) !
Il y a 4 raisons à ce changement :

Read more
19 Oct, 12

Gérer les bugs avec SoftwareZator 2012


Je constate de plus en plus que beaucoup de personnes utilisent le débogueur de SoftwareZator 2012 à tord et à travers sans réellement savoir l’utiliser. Cet article a pour but de vous initier au débogueur de SoftwareZator.

Comme souvent dans mes articles, on va commencer par de la théorie avant d’attaquer la pratique.

Qu’est-ce qu’un bogue?

Pour faire le plus simple possible : c’est quand un programme ne s’exécute pas comme nous le voulons, comme nous l’avons prévu, ou quand il nous retourne une erreur au moment de son exécution.
Lorsque vous ne parvenez pas à générer un projet, cela n’est pas considéré comme un bogue.

Qu’est-ce qu’un débogueur?

Ce n’est pas un outil miracle qui va vous corriger automatiquement vos erreurs. En revanche il peut vous aider à les résoudre. Lancer un projet « en mode débogue » a pour but d’identifier la partie d’une fonction qui ne répond pas à nos attentes, qui ne s’exécute pas comme nous l’avions imaginé. Concrètement, le débogueur a pour unique but d’identifier une erreur d’exécution dans votre projet, de vous afficher où cette erreur a été rencontrée, et de vous afficher des informations « pouvant » vous aider à identifier la cause exacte du problème et comment le résoudre.

Qu’est-ce qu’un point d’arrêt?

Un point d’arrêt permet, en mode débogue, de mettre en pause votre projet en cours d’exécution afin d’avoir accès aux fameuses « informations pouvant vous aider à identifier la cause d’un problème » à un moment choisi dans vos fonctions. Nous verrons dans la pratique son utilisation, qui vous éclaircira sur l’utilité de ces points d’arrêts.

Présentation des outils de débogage de SoftwareZator 2012

SoftwareZator 2012 (édition professionnelle uniquement) est constitué de plusieurs outils constituant le débogueur. Tout d’abord, le menu « Débogage ». Ce sont les commandes les plus importantes du débogueur. Vous pourrez lancez vos projet en mode débogue, les mettre en pause, les arrêter ou les reprendre.

Read more
27 Sep, 12

Créer une (très simple) application modulable en .Net


Ca faisait longtemps que je n’avais pas écris d’article technique sur le .Net. Je manque un peu d’idées car tous les sujets ont déjà été traités. Néanmoins, à la demande de certains de mes internautes sur le forum français de Veler Software, je publie cet article qui va vous expliquer le fonctionnement d’une application modulable en .Net.

Définition

Il me serait inutile de définir ce qu’est le .Net Framework, j’imagine que toutes les personnes s’intéressant à cet article savent ce que c’est. Alors plutôt, qu’est-ce qu’une application modulable? On peut traduire cette phrase par « un logiciel utilisant des plugins ». Un « plugin » est une bibliothèque (un fichier .dll) pouvant être aussi bien ajoutée que supprimée d’un logiciel, sans mettre en cause son dysfonctionnement (il est courant qu’un logiciel crash si on supprime une dll au hasard). Ce plugin a pour but principal d’ajouter de nouvelles fonctionnalités à ce fameux logiciel.
Une application modulable est donc un logiciel auquel on peut rajouter des fonctionnalités en ajoutant une simple dll, sans avoir pour autant besoin de signifier au logiciel que cette dll existe. En effet, le logiciel doit être capable de trouver cette dll, de la configurer (si nécessaire) et d’en exploiter toute ses capacités automatiquement, sans intervention humaine (j’entends par là, réinstallation du logiciel, modification de l’exécutable pour accepter la dll…)

Exemple d’applications modulable

Nombreux sont les logiciels pouvant recevoir des « modules », « plugins » :
– SoftwareZator (héhéhé)
– Firefox (et ses modules complémentaires)
– Google Chrome
– Internet Explorer
– Les logiciels Adobe (je parle de Photoshop et Dreamweaver surtout)
– Office
– Visual Studio
– Windows Live Messenger (et le fameux Messenger Plus)
– Et j’en passe des dizaines très connus

Read more
1 Juil, 12

Présentation de la barre de collage de ClipboardZanager 2


La seconde version de ClipboardZanager est en développement, après deux ans de service pour la toute première version. Les performances sont meilleurs, notamment au niveau de l’utilisation du CPU lorsque le logiciel est au repos ou travail en arrière-plan. Cette nouvelle version a également son lot de nouveautés, et nous verrons dans cet article la présentation de la barre de collage de ClipboardZanager.

Deux méthodes pour coller une donnée

Il ne fait aucun doute que certains utilisateurs apprécieront les nouveautés, et d’autres préféreront garder les anciennes fonctionnalités, tout en bénéficiant des nouvelles performances. C’est pourquoi ClipboardZanager 2 vous proposera de choisir entre le nouveau système de collage, et l’ancien, présent dans ClipboardZanager 1.0.

Vous aurez donc le choix entre le « Menu classique » et la « Barre de collage » :

Menu classique

Menu classique

 

Barre de collage

Barre de collage

Read more