wie kann ich eine bestimmte Schriftart Installieren

  • Hallo Ich hab folgendes Problem:
    Ich möchte mit meinem Script auf mehreren Pc unter anderen eine bestimmte Schrifftart (ARIALUNI.TTF) Installieren. Per Hand reicht es ja wenn ich die TTF-File einfach in den Ordner C:\WINDOWS\FONTS kopiere. Unter AutoIt geht das aber nicht Filecopy bringt da kein ergebnis.
    meine Frage nun wie kann ich das unter Autot realisieren?


    EDIT: Sorry, hatte bei der Angabe des Quellpfades nen Buchstaben vergessen, Daher die Probleme mit Filecopy

    Einmal editiert, zuletzt von hanswurst (25. August 2008 um 11:46)

  • Was meinst du mit Filecopy bringt kein Ergebnis?
    Kopiert er die File nicht oder erkennt Windows die Schrift trotz kopieren nicht, oder was genau ist dein Problem?

  • Sorry mein Fehler hatte bei der Angabe vom QuellPfad nen Buchstaben vergessen. Danke aber für eure mühen

  • Hallo !
    Muss hier nochmal nachhaken. Normal reicht es ja bei Windows nicht, die Dateien einfach ins Fonts Verzeichniss zu kopieren.
    Wie kann ich diese Schriften automatisch registrieren, sodass sie sofort zur Verfügung stehen ?

    Gruß
    Gawe

    • Offizieller Beitrag

    Der Font darf nicht mit FileCopy kopiert werden!!
    Nur bei dem Kopiervorgang des Explorers, wird der Font auch gleichzeitig registriert. Also mußt du diesen Vorgang nachbilden.
    Probiere das mal:

    [autoit]

    Global $FontInstallDir = '....\FontsToInstall' ; dein Ordner mit den neuen Fonts (darf nur Fonts enthalten!!)
    Global $oFSO = ObjCreate("Scripting.FileSystemObject")
    Global $oApp = ObjCreate("Shell.Application")
    Global $sFontsPath = @WindowsDir & "\Fonts"
    Global $oFolderCopy = $oApp.Namespace($FontInstallDir)
    For $oFont In $oFolderCopy.Items
    If Not $oFSO.FileExists($sFontsPath & "\" & $oFont.Name) Then
    $oApp.Namespace($sFontsPath).CopyHere($oFont)
    EndIf
    Next

    [/autoit]
  • Ist jetzt schon ewig her, aber ich hab das Problem dass derzeit keine der UDFs (die ich im englischen Forum gefunden habe) funktioniert ...
    Bei deinem Script Auszug (verzeih mir, länger nicht in AutoIt aktiv) hab ich jetzt folgende Frage:
    Kann man das auch nur für 1 Font machen, da ich bereits ein eigenes Script gebastelt habe welches installiert:

    [autoit]


    $Array = _FileListToArray(@ScriptDir & "\Fonts");
    For $i = 1 To UBound($Array) - 1
    $Fonts = _FileListToArray(@ScriptDir & "\Fonts\" & $Array[$i])
    $ProgressState += 1;
    For $i2 = 1 To UBound($Fonts) - 1
    ;Hier installieren mit "@ScriptDir & "\Fonts\" & $Array[$i] & "\" & $Fonts[$i2]" = Font Pfad
    $ProgressState += 1;
    GUICtrlSetData($Fortschritt, "Fortschritt: " & $ProgressState & " / " & $Counter & " Fonts")
    GUICtrlSetData($Progress1, Round($ProgressState / $Counter))
    Next
    Next

    [/autoit]

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Ich hab die früher immer per FileCopy kopiert und dann mit per AddFontRessource registriert.
    Ungefährer Aufbau - ungetestet:

    [autoit]

    #RequireAdmin
    #include <SendMessage.au3>

    [/autoit][autoit][/autoit][autoit]

    Global Const $HWND_BROADCAST = 0xFFFF
    Global Const $WM_FONTCHANGE = 0x1D

    [/autoit][autoit][/autoit][autoit]

    Global $s_FilePath = @ScriptDir
    Global $s_FileName = "Test.otf"

    [/autoit][autoit][/autoit][autoit]

    FileCopy($s_FilePath & "\" & $s_FileName, @WindowsDir & '\Fonts\')
    DllCall('Gdi32.dll', 'int', "AddFontResource", 'str', @WindowsDir & '\Fonts\' & $s_Filename)
    _SendMessage($HWND_BROADCAST, $WM_FONTCHANGE)

    [/autoit]
  • Egal bei welchem Script, es dauert immer enorm lange (länger als es einfach von hand aus jedem ordner reinzuziehen) ...
    Funzt die UDF bei dir:

    [autoit]


    Global Const $HWND_BROADCAST = 0xFFFF
    Global Const $WM_FONTCHANGE = 0x1D

    [/autoit][autoit][/autoit][autoit]

    Func InstallFont($FontPath, $FontName)
    FileCopy($FontPath & "\" & $FontName, @WindowsDir & '\Fonts\')
    DllCall('Gdi32.dll', 'int', "AddFontResource", 'str', @WindowsDir & '\Fonts\' & $FontName)
    _SendMessage($HWND_BROADCAST, $WM_FONTCHANGE)
    EndFunc

    [/autoit]

    €: Anscheinend auch nicht so wirklich ...
    Habs jetzt anders gelöst, hab alle Fonts einfach rauskopiert in einen Ordner und die daraus dann in /Fonts/ gezogen

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

    Einmal editiert, zuletzt von Xorianator (19. Januar 2013 um 23:44)