public class InstallFont { [DllImport("kernel32.dll", SetLastError = true)] static extern int WriteProfileString(string lpszSection, string lpszKeyName, string lpszString); [DllImport("user32.dll")] public static extern int SendMessage(int hWnd, // handle to destination window uint Msg, // message int wParam, // first message parameter int lParam // second message parameter ); [DllImport("gdi32")] public static extern int AddFontResource(string lpFileName); [DllImport("gdi32")] public static extern int RemoveFontResource(string lpFileName); /// <summary> /// 安装字体 /// </summary> /// <param name="orginFontPath">原始字体文件所在路径</param> public static int installFont(string orginFontPath) { string WinFontDir = "C://windows//fonts"; string FontFileName = "my font.TTF"; string FontName = "my font"; int Ret=0; int Res; string FontPath; const int WM_FONTCHANGE = 0x001D; const int HWND_BROADCAST = 0xffff; FontPath = WinFontDir + "//" + FontFileName; if (File.Exists(FontPath))//若已存在则先删除之 { try { removeFont(FontPath); } catch (Exception) { //throw; } } if (!File.Exists(FontPath)) { File.Copy(orginFontPath + "//" + FontFileName, FontPath); Ret = AddFontResource(FontPath); Res = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); //Ret = WriteProfileString("fonts", FontName + "(TrueType)", FontFileName); } return Ret; } public static int removeFont(string FontFilePathName) { RemoveFontResource(FontFilePathName); try { File.Delete(FontFilePathName); } catch (Exception) { return 0; } return 1; } }
若只使用AddFontResource函数,则重启机器后字体文件消失,此方法字体在机器重启后仍有效
删除字体功能,需要删除Fonts文件夹下的文件才有效
参考:http://blog.youkuaiyun.com/vcleaner/archive/2005/07/27/436079.aspx
<script type="text/javascript"><!-- google_ad_client = "pub-7232158790402205"; /* 468x60, 创建于 10-1-10 */ google_ad_slot = "2831231878"; google_ad_width = 468; google_ad_height = 60; // --></script>