Support pour Winamp, Windows Media Player, Media Center et VLC.

Installation/désinstallation d'une police de caractères


Tutorial pour apprentis

Introduction

La question fondamentale est : "Qu'est ce que je veux faire ?"

La réponse est très simple, je veux installer une police de caractères (ou fonte) sous Windows 9x Me ou encore NT. Encore faut-il savoir sous quel système la police va être installée. Si je connais déjà le système d'exploitation de destination de la police, je vais directement à la 3ème partie du tutorial après avoir fini de lire l'introduction, sinon je continue comme si de rien n'était... la la la la la la la la lala la la lala lala (ben oui comme si de rien n'était, je chantonne :) ).

Le problème

Ce qui serait bien c'est que la police s'installe sans avoir besoin de redémarrer l'ordinateur :( car en effet il existe une solution très rapide à mettre en oeuvre qui consiste à écrire une entrée dans la base de registre et de rebooter... Mais non, il existe une solution bien meilleure qui consiste à utiliser une dll. J'en vois déjà qui deviennent tout rouge à l'idée de devoir en écrire une et de devoir en utiliser une dans l'Install... Ne vous inquiétez pô, je vous la livre sur un plateau, vous pouvez la télécharger ici (source du forum de ceux qui parlent grand breton kichik, le forum officiel quoi !).

Matériel Nécessaire

Eh mec il faut de l'artillerie lourde... :

  • NSIS FR traduite par Veekee / Matze (conseillée)
  • Une police de caractères à installer :)
  • La dll que vous trouvez ici

Détection du système d'exploitation installé...

Alors là, je ne me foule pas les méninges, je recopie le script qui existe déjà pour ça dans NSIS/function.htm et je regarde la fonction GETWindowsVersion :

Function GetWindowsVersion Push $0 Push $9 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion StrCmp $0 "" 0 lbl_winnt ; we are not NT. ReadRegStr $0 HKLM SOFTWARE\Microsoft\Windows\CurrentVersion VersionNumber StrCpy $9 $0 1 StrCmp $9 '4' 0 lbl_error StrCpy $9 $0 3 StrCmp $9 '4.0' lbl_win32_95 StrCmp $9 '4.9' lbl_win32_ME lbl_win32_98 lbl_win32_95: StrCpy $0 '95' Goto lbl_done lbl_win32_98: StrCpy $0 '98' Goto lbl_done lbl_win32_ME: StrCpy $0 'ME' Goto lbl_done lbl_winnt: StrCpy $9 $0 1 StrCmp $9 '3' lbl_winnt_x StrCmp $9 '4' lbl_winnt_x StrCmp $9 '5' lbl_winnt_5 lbl_error lbl_winnt_x: StrCpy $0 "NT $0" 6 Goto lbl_done lbl_winnt_5: Strcpy $0 '2000' Goto lbl_done lbl_error: Strcpy $0 '' lbl_done: Pop $9 Exch $0 FunctionEnd

PS: C'est la valeur de $0 qui indique la version de Windows :)

Mais pourquoi donc connaître la version de Windows utilisée ??? Mais parce que pour installer une police, l'entrée dans la base de registre ne se situe pas dans le même chemin...

Entrée du nom de la police dans la base de registre...

Windows NT/2000/XP/Vista

WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "nom de la police" "nom de fichier.TTF"

Windows 95/98/ME

WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts" "nom de la police" "nom de fichier.TTF"

Pour ceux qui ne savent pas sur quel système leur police va s'installer, ils peuvent par exemple ajouter au script précédent :

Function GetWindowsVersion Push $0 Push $9 ReadRegStr $0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion StrCmp $0 "" 0 lbl_winnt ; we are not NT. ReadRegStr $0 HKLM SOFTWARE\Microsoft\Windows\CurrentVersion VersionNumber StrCpy $9 $0 1 StrCmp $9 '4' 0 lbl_error StrCpy $9 $0 3 StrCmp $9 '4.0' lbl_win32_95 StrCmp $9 '4.9' lbl_win32_ME lbl_win32_98 lbl_win32_95: StrCpy $0 '95' WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts" "nom de la police" "nom de fichier.TTF" Goto lbl_done lbl_win32_98: StrCpy $0 '98' WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts" "nom de la police" "nom de fichier.TTF" Goto lbl_done lbl_win32_ME: StrCpy $0 'ME' WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows\CurrentVersion\Fonts" "nom de la police" "nom de fichier.TTF"' Goto lbl_done lbl_winnt: StrCpy $9 $0 1 StrCmp $9 '3' lbl_winnt_x StrCmp $9 '4' lbl_winnt_x StrCmp $9 '5' lbl_winnt_5 lbl_error lbl_winnt_x: StrCpy $0 "NT $0" 6 WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "nom de la police" "nom de fichier.TTF" Goto lbl_done lbl_winnt_5: Strcpy $0 '2000' WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" "nom de la police" "nom de fichier.TTF" Goto lbl_done lbl_error: Strcpy $0 '' lbl_done: Pop $9 Exch $0 FunctionEnd

Si certains trouvent ça trop lourd de répéter ces lignes, écrivez un script avec des lbl_winntgoodversion et lbl_win9xgoodversion dans lesquels vous rentrez l'entrée dans la base de registre. Il faudra alors modifier les goto done par des goto winntgoodversion et goto win9xgoodversion :) Je crois donc que ça revient au même pour le nombre de lignes...

Et pour ne pas rebooter : la dll est l'arme secrète...

Et oui, grâce à cette dll, pas besoin de rebooter pour voir la fonte :) il faut taper ce script :

fonts::registerFont "nom de la police.TTF" ;utilisation de la dll pour enregistrer la fonte

ATTENTION : si une erreur apparaît, c'est sûrement qu'il faut indiquer le chemin complet vers la fonte.

Désinstallation de la police de caractères...

Pour désinstaller la police, il faut premièrement supprimer les entrées dans la base de registre, puis ensuite écrire ce script dans la section de désinstallation :

fonts::unregisterFont "nom de la police.TTF" ;utilisation de la dll pour "désenregistrer" la fonte

et voila, votre script pour installer une police de caractères est fini...



Une idée de pas à pas ?

Contactez Julien.