Ouvir le dossier Fonts dans Windir / Activer une font

Résolu
VHSeifer Messages postés 18 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 16 mai 2008 - 21 août 2005 à 20:42
VHSeifer Messages postés 18 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 16 mai 2008 - 21 août 2005 à 22:09
Bonjour

J'ai remarqué un truc trop bizarre au sujet d'une nouvelle font :

Quand une nouvelle (pas par défaut) Font encodée dans un programme utilisateur s'exécute sur un autre pc ou cette font n'existe pas , evidemment la nouvelle Font est remplacée par une autre par défaut ( jusqu'ici c'est normal )

J'ai donc ajouté a mon programme un test au tt début sur le fichier font pour voir si oui ou non elle existe :


string valueEnv =
Environment.ExpandEnvironmentVariables(
"%windir%\\Fonts\");

FileInfo fi =
new
FileInfo(valueEnv +
"\\nomdelafont.ttf");

Si celle-ci n'existe pas donc tout simplement je recopie le fichier dans ce même dossier , la copie s'effectue correctement ( car je refais le même test après...)

MAIS , ici est le problème... on dirait que la font n'est pas activée ! j'ai meme fait en sorte que après avoir copié la font le programme se quitte et demande un relancement => toujours pas chargée... et jusque la, le seul moyen d'activer la nouvelle font est d'ouvrir avec l'explorateur windows le dossier Fonts !! juste être dedans... et ensuite ca marchera a chaque fois...

Donc la, je sais que c'est une question plus Windozienne je crois que C#, mais si qqu'un sait ce qui se passe quand on entre dans le dossier Fonts... ou alors, un bidouillage serait alors d'afficher le dossier après la copie ( juste histoire de montrer )...

Merci bien

3 réponses

cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 août 2005 à 21:12
Salut,

En utilisant la classe Process tu peux demander l'ouverture d'une fenêtre explorer sur le repertoire :

StringBuilder fontsDirPath = new StringBuilder();
SHGetFolderPath(IntPtr.Zero, CSIDL_FONTS, IntPtr.Zero, SHGFP_TYPE_CURRENT, fontsDirPath);
Process.Start(fontsDirPath.ToString());

SHGetFolderPath
CSIDL

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
21 août 2005 à 21:13
Hum, avec les déclarations de la méthode et des constantes ça devrait être plus pratique :

[DllImport("shell32.dll")]
private static extern int SHGetFolderPath(
IntPtr hwndOwner,
int nFolder,
IntPtr hToken,
uint dwFlags,
[Out] StringBuilder pszPath
);


private const int CSIDL_FONTS = 0x0014;
private const int SHGFP_TYPE_CURRENT = 0;

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
VHSeifer Messages postés 18 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 16 mai 2008 1
21 août 2005 à 22:09
Ca marche !

Problème corrigé , un grand merci encore à toi coq !
0
Rejoignez-nous