如何使用 VB.Net 新增 (安裝) 字型

如何使用 VB.Net 新增 (安裝) 字型

如何使用 VB.Net 新增 (安裝) 字型

' Imports 陳述式

' 匯入在所參考的專案和組件中定義的命名空間(Namespace) 或程式設計項目。

Imports System.IO

Imports System.Environment

Imports System.Drawing.Text

Public Class Form1

' API 宣告新增字型/ 移除字型, 發送訊息

Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" _

(ByVal lpFileName As String) As Integer

Declare Function RemoveFontResource Lib "gdi32" Alias "AddFontResourceA" _

(ByVal lpFileName As String) As Integer

Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" _

(ByVal hWnd As Integer, ByVal Msg As Integer, _

ByVal wParam As Integer, ByVal lParam As Integer) As Integer

' API 常數宣告

Private Const HWND_Broadcast As Long = &HFFFF& ' 廣播

Private Const WM_FontChange As Long = &H1D& ' 字型異動

Private strFile As String = "D:\DynaFont\Dyna\SLEEPM1.TTF" ' 字型路徑+檔名

' 列舉電腦上所安裝的字型

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

Dim IFC As New InstalledFontCollection ' 初始化InstalledFontCollection 類別的新執行個體。

' FontCollection.Families 屬性: 取得與這個FontCollection 相關聯的FontFamily 物件陣列。

' FontFamily 類別: 定義具有相似基本設計和特定樣式變化的字體群組。這個類別無法被繼承。

For Each fm As FontFamily In IFC.Families

ListBox1.Items.Add(fm.Name) ' Name : 取得這個FontFamily 的名稱。

Next

End Sub

' 方法1 : 新增字型

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

' GetEnvironmentVariable 方法: 取得環境變數

' WinDir : Windows 所在目錄, Windows\Fonts 為: 字型所在目錄

' Path.GetFileName 方法: 要從其中取得檔案名稱和副檔名的路徑字串。

Dim strDstFile As String = GetEnvironmentVariable("WinDir") & "\Fonts\" & Path.GetFileName(strFile)

File.Copy(strFile, strDstFile) ' 複製字型檔案到Windows 字型目錄

' PrivateFontCollection 類別

' 提供從字型檔案建立的字型系列集合,這些字型檔案是由用戶端應用程式所提供。

' 命名空間:System.Drawing.Text

' 組件:System.Drawing (在system.drawing.dll 中)

' 初始化PrivateFontCollection 類別的新執行個體

Dim PFC As New PrivateFontCollection

' PrivateFontCollection.AddFontFile 方法: 從指定的檔案將字型加入這個PrivateFontCollection。

PFC.AddFontFile(strFile)

SendMessage(HWND_Broadcast, WM_FontChange, 0, 0) ' 廣播訊息字型異動

MessageBox.Show("OK!") ' 顯示完成訊息

End Sub

' 方法2 : 新增字型

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

' GetEnvironmentVariable 方法: 取得環境變數

' WinDir : Windows 所在目錄, Windows\Fonts 為: 字型所在目錄

' Path.GetFileName 方法: 要從其中取得檔案名稱和副檔名的路徑字串。

Dim strDstFile As String = GetEnvironmentVariable("WinDir") & "\Fonts\" & Path.GetFileName(strFile)

File.Copy(strFile, strDstFile) ' 複製字型檔案到Windows 字型目錄

If AddFontResource(strFile) Then ' Call API AddFontResource 增加字型

SendMessage(HWND_Broadcast, WM_FontChange, 0, 0) ' 廣播訊息字型異動

MessageBox.Show("OK!") ' 顯示完成訊息

End If

End Sub

' 移除字型

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

' GetEnvironmentVariable 方法: 取得環境變數

' WinDir : Windows 所在目錄, Windows\Fonts 為: 字型所在目錄

' Path.GetFileName 方法: 要從其中取得檔案名稱和副檔名的路徑字串。

Dim strFontFile As String = GetEnvironmentVariable("WinDir") & "\Fonts\" & Path.GetFileName(strFile)

If RemoveFontResource(strFontFile) Then ' Call API RemoveFontResource 移除字型

File.Delete(strFontFile) ' 刪除字型檔

SendMessage(HWND_Broadcast, WM_FontChange, 0, 0) ' 廣播訊息字型異動

MessageBox.Show("OK!") ' 顯示完成訊息

End If

End Sub

End Class