[API]
EnumFontsA
EnumFontsW
LOGFONT
GetDC
ReleaseDC

[DEFINE]
Private DesiredFont As String
Private DesiredFontInstalled As Boolean

[CODE]
Public Function IsFontInstalled(ByVal FontName As String) As Boolean
  Dim xLong1 As Long
  
  xLong1 = GetDC(0&)
  If Not xLong1 = 0& Then
    DesiredFont = LCase(Left(FontName, 32&))
    If IsUnicode Then
      Call EnumFontsW(xLong1, 0&, AddressOf IsFontInstalled_CallbackProc, 0&)
      Else
      Call EnumFontsA(xLong1, 0&, AddressOf IsFontInstalled_CallbackProc, 0&)
      EndIf
    IsFontInstalled = DesiredFontInstalled
    Call ReleaseDC(0&, xLong1)
    End If
  End Function

Public Function IsFontInstalled_CallbackProc(ByRef lplf As LOGFONT, ByVal lptm As Long, dwType As Long, ByVal lpData As Long) As Long
  Dim xChar1 As String
  
  xChar1 = String(33&, vbNullChar)
  If IsUnicode Then
    Call RtlMoveMemory(ByVal StrPtr(xChar1), ByVal VarPtr(lplf.lfFaceName(0)), 64&)
    Else
    Call RtlMoveMemory(ByVal xChar1, ByVal VarPtr(lplf.lfFaceName(0)), 32&)
    End If
  xChar1 = LCase(Left(xChar1, 32))
  If xChar1 = DesiredFont Then
    DesiredFontInstalled = True
    Else
    IsFontInstalled_CallbackProc = 1&
    End If
  End Function
