윈도우즈 시스템에서 C# 프로그램에 글꼴 자동 설치

13742 단어
Windows 시스템에서는 원래 자체적으로 가지고 있던 글꼴의 스타일이 제한되어 있으며, 때때로 저희 프로그램은 일부 희귀하거나 시스템이 자체적으로 가지고 있지 않은 글꼴을 사용합니다.따라서 프로그램이 시작될 때 시스템에 이 글꼴이 있는지 확인하고 없으면 설치하고 동적으로 글꼴을 불러올 수 있도록 글꼴을 프로그램에 포장해야 합니다.
1.1 코드로 글꼴 설치
주의: 글꼴을 설치할 때 윈도우즈 관리자 권한이 필요합니다. [DllImport("kernel32.dll", SetLastError = true)] public static extern int WriteProfileString(string lpszSection, string lpszKeyName, string lpszString); [DllImport("gdi32")] public static extern int AddFontResource(string lpFileName); /// /// /// /// /// /// /// public static bool InstallFont(string fontFilePath) { try { System.Security.Principal.WindowsIdentity identity = System.Security.Principal.WindowsIdentity.GetCurrent(); System.Security.Principal.WindowsPrincipal principal = new System.Security.Principal.WindowsPrincipal(identity); // if (principal.IsInRole(System.Security.Principal.WindowsBuiltInRole.Administrator) == false) { throw new UnauthorizedAccessException(" , 。"); } // Windows string fontPath=Path.Combine(System.Environment.GetEnvironmentVariable("WINDIR") , "fonts",Path.GetFileName(fontFilePath)); // if (!File.Exists(fontPath)) { // File.Copy(System.Windows.Forms.Application.StartupPath + "\\font\\" + FontFileName, FontPath); //font // File.Copy(fontFilePath, fontPath); //font AddFontResource(fontPath); //Res = SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); //WIN7 , 。 。 // WriteProfileString("fonts", Path.GetFileNameWithoutExtension(fontFilePath) + "(TrueType)", Path.GetFileName(fontFilePath)); } } catch (Exception ex) { throw new Exception(string.Format($"[{Path.GetFileNameWithoutExtension(fontFilePath)}] ! :{ex.Message}" )); } return true; }
1.2 프로젝트 자원 파일에서 글꼴 로드
이 방법은 개발자가 프로젝트 자원 파일에 글꼴 파일을 자원 형식으로 넣어야 한다.글꼴 라이브러리에 설치할 필요가 없습니다. 다른 프로그램이 필요하면 직접 설치하거나 불러와야 합니다.다음 코드를 사용하여 프로그램에 필요한 글꼴을 만들 수 있습니다./// ////// /// /// public Font GetResoruceFont(byte[] bytes) { System.Drawing.Text.PrivateFontCollection pfc = new System.Drawing.Text.PrivateFontCollection(); IntPtr MeAdd = Marshal.AllocHGlobal(bytes.Length); Marshal.Copy(bytes, 0, MeAdd, bytes.Length); pfc.AddMemoryFont(MeAdd, bytes.Length); return new Font(pfc.Families[0], 15, FontStyle.Regular); }
1.3 글꼴 파일 로드, 글꼴 로드
글꼴의 경로를 설정한 다음 글꼴 파일을 불러와서 글꼴을 만듭니다.글꼴 라이브러리에 설치할 필요가 없습니다. 다른 프로그램이 필요하면 직접 설치하거나 불러와야 합니다.  /// /// /// /// /// public Font GetFontByFile(string filePath) { // , 。 System.Drawing.Text.PrivateFontCollection pfc = new System.Drawing.Text.PrivateFontCollection(); pfc.AddFontFile(filePath);// Font font = new Font(pfc.Families[0], 24, FontStyle.Regular, GraphicsUnit.Point, 0);//font return font; }
2. 시스템에 어떤 글꼴이 포함되어 있는지 검사
어떤 글꼴이 설치되었는지 확인하는 방법은 여러 가지가 있습니다. 이 파일만 검사하는 방법에 대해 설명합니다./// /// /// /// /// public static bool CheckFont(string familyName) { string FontPath = Path.Combine(System.Environment.GetEnvironmentVariable("WINDIR"), "fonts", Path.GetFileName(familyName)); // return File.Exists(FontPath); }
글꼴 스타일을 사용할 수 있는지 확인하려면 다음과 같이 하십시오.
  /// /// /// /// /// /// public bool CheckFont(string familyName, FontStyle fontStyle= FontStyle.Regular ) { InstalledFontCollection installedFontCollection = new InstalledFontCollection(); FontFamily[] fontFamilies = installedFontCollection.Families; foreach(var item in fontFamilies) { if (item.Name.Equals(familyName)) { return item.IsStyleAvailable(fontStyle); } } return false; }

좋은 웹페이지 즐겨찾기