Total Commander Knowledge Base

Есть вопрос?

Поищите ответ в самой большой русскоязычной базе знаний по Total Commander!

Cистемная установка выбранных шрифтов

Иногда возникает необходимость установить в Windows выбранные в активной панели ТС шрифты.

Решение представлено в следующем VBS-скрипте.

'•••••••••••••••••••••••••••••••••••••••••••••••
' Установка выбранных в панели шрифтов в систему
' Параметр: %WL
'•••••••••••••••••••••••••• Автор: Flasher © •••

If WScript.Arguments.Count = 0 Then WScript.Quit
Exts = "|chr|fnt|fon|fot|mmm|otf|ttf|ttc|pfm|pfb|"
Dim WSH : Set WSH = CreateObject("WScript.Shell")
Set Dict = CreateObject("Scripting.Dictionary")
Set ShAp = CreateObject("Shell.Application")
Fonts = WSH.SpecialFolders("Fonts") & "\"
Set oFonts = ShAp.NameSpace(&H14)
Title = "   Установка шрифтов"
With CreateObject("Scripting.FileSystemObject")
  Set File = .OpenTextFile(WScript.Arguments(0),,,-1)
  Do : F = File.ReadLine : FN = .GetFileName(F) : Ext = .GetExtensionName(F)
    If .FileExists(F) And InStr(Exts, "|" & LCase(Ext & "|")) Then
      PF = .GetParentFolderName(F) : BN = .GetBaseName(F) : C = 1
      Font = ShAp.NameSpace(PF).ParseName(FN).ExtendedProperty("DocTitle")
      If .FileExists(Fonts & FN) Then
        If Font = oFonts.ParseName(FN).ExtendedProperty("DocTitle") Then C = 0
      ElseIf Left(Right(BN, 2), 1) = "_" And InStr("abcdef", LCase(Right(BN, 1))) Then
        For i = 0 To 20
          FName = Left(BN, Len(BN) - 1) & i & "." & Ext
          If .FileExists(Fonts & FName) Then
            With oFonts.Items .Filter 73920, Font & "*"
              If .Count Then C = 0 : Exit For
            End With
          Else Exit For End If
        Next
      End If
      If C Then
        T = T + 1 : FNames = FNames & Font & vbCr
        If Dict.Exists(PF) Then FN = Dict.Item(PF) & ";" & FN
        Dict.Item(PF) = FN
      End If
    End If
  Loop Until File.AtEndOfStream : File.Close
End With
If C Then
  For Each Key in Dict.Keys
    Set Items = ShAp.NameSpace(Key).Items
    Items.Filter 73920, Dict(Key)
    oFonts.CopyHere Items
  Next : Dict.RemoveAll
End If : PFix2 = " " : If T > 1 Then PFix1 = "ы" : PFix2 = "ы:" & vbCr
If T Then  WSH.Popup "Установлен" & PFix1 & " шрифт" & PFix2 & FNames, 5, _
Title Else WSH.Popup "Отсутствующие в системе шрифты не выбраны!", 3, Title

Flasher
20.04.2016