首先,您需要将字体复制到 Windows\Fonts 目录(您需要确保使用 .NET Framework 提供的 Environment.GetFolderPath 方法,而不是硬编码 Windows 目录的典型路径,以防万一您的用户环境中的某些内容有所不同)。
然后,您需要调用AddFontResource function 将字体添加到系统字体表中。由于AddFontResource 由Windows API 提供,因此您需要P/Invoke 才能从VB.NET 代码中调用它。声明看起来像这样(lpszFilename 参数是您要添加的字体文件的路径):
<DllImport("gdi32.dll"), CharSet := CharSet.Auto> _
Public Shared Function AddFontResource(ByVal lpszFilename As String) As Integer
最后,如果在您从代码中调用 AddFontResource 函数时,Word(或您打算在其中使用字体的任何应用程序)正在运行,您需要通知它可用的字体变了。为此,您可以使用SendMessage 函数向所有顶级窗口发送WM_FONTCHANGE 消息并将hWnd 参数设置为HWND_BROADCAST。同样,您需要 P/Invoke;声明如下所示:
Public Const HWND_BROADCAST As Integer = &HFFFF
Public Const WM_FONTCHANGE As Integer = &H1D
<DllImport("user32.dll"), CharSet := CharSet.Auto> _
Public Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As Integer
你可以这样调用它来发送广播消息:
SendMessage(New IntPtr(HWND_BROADCAST), WM_FONTCHANGE, IntPtr.Zero, IntPtr.Zero)
注意:上述步骤仅安装当前 Windows 会话的字体。如果您需要字体在后续重新启动时可用,则需要将其添加到注册表中。修改的关键是这个:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts