Windows FONT per Script hinzufügen
Hallo zusammen,
ich habe ein Script für die Installation von Visualisierungsrechnern
geschrieben.
d.h. Nachdem XP installiert wurde, muss nur noch diese Script
ausgeführt werden, dann werden alle notwendigen Files von einem Server
kopiert
-Dienste installiert
-Scheduler TASK's angelegt
-Iconen auf dem Desktop erzeugt
-Drucker installiert
Damit die Software läuft müssen jedoch 3 Fonts installiert werden,
was ich bis jetzt immer noch manuel machen muss,
indem ich die Fontfile mit dem Explorer in das c:\windows\fonts Verzeichnis ziehe.
Dann geht automatisch ein Fenster auf und die Fonts werden installiert.
Das alleinige hineinkopieren der Files mit Robocopy etc in das c:\windows\fonts Verzeichnis
reicht nicht aus.
Vielleicht weiß jemand wie ich das Problem mit cmd oder vbs lösen kann
Mfg
Hannes
ich habe ein Script für die Installation von Visualisierungsrechnern
geschrieben.
d.h. Nachdem XP installiert wurde, muss nur noch diese Script
ausgeführt werden, dann werden alle notwendigen Files von einem Server
kopiert
-Dienste installiert
-Scheduler TASK's angelegt
-Iconen auf dem Desktop erzeugt
-Drucker installiert
Damit die Software läuft müssen jedoch 3 Fonts installiert werden,
was ich bis jetzt immer noch manuel machen muss,
indem ich die Fontfile mit dem Explorer in das c:\windows\fonts Verzeichnis ziehe.
Dann geht automatisch ein Fenster auf und die Fonts werden installiert.
Das alleinige hineinkopieren der Files mit Robocopy etc in das c:\windows\fonts Verzeichnis
reicht nicht aus.
Vielleicht weiß jemand wie ich das Problem mit cmd oder vbs lösen kann
Mfg
Hannes
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 16850
Url: https://administrator.de/forum/windows-font-per-script-hinzufuegen-16850.html
Ausgedruckt am: 22.04.2025 um 17:04 Uhr
6 Kommentare
Neuester Kommentar
Moin, Hannes,
gute Nachricht - machbar ist es. Weniger gute Nachricht: ein paar Infos fehlen (mir) noch.
Also, erstmal der Ansatz: Nur die Fonts in %windir%\Fonts kopieren reicht in der Tat nicht. Hast Du ja gemerkt.
Zusätzlich müssen die neuen Fonts auch als neue Resource hinzugefügt und "bekannt gemacht" werden.
Das läuft über zwei API-Aufrufe in der GDI32.dll und User32.dll. Das lässt sich mit einem *.vbs-Schnipsel lösen.
Dann allerdings sind diese Fonts nur für die aktuelle Windows-Session registriert. Da es ja permanent sein soll, muss noch ein Registry-Eintrag (je Font) geschrieben werden - der allerdings in HKEY_LOCAL_MACHINE.
Also wären zur handwerklichen Umsetzung Deiner Anforderung noch folgende Details hilfreich:
- diese drei Fonts haben auch feste Namen? Die man/frau "hart" ins Skript schreiben kann?
- Oder variiert das (Fontnamen in einer zusätzlichen Ini-Datei o.ä.)?
- Nur zur Sicherheit: Installation wird gemacht mit Adminrechten? wegen HKLM etc...
- Zielsysteme: ausschließlich > NT? Oder >= XP?
- in was ist denn Dein bisheriges Script geschrieben? Batch?
- werden Logdateien geschrieben?
- ist Deine bisherige Installation vollständig "unattended"? Was soll bei Fehlern ("Font konnte nicht installiert werden") passieren? MsgBox? Abbruch?
Grundsätzlich sollte es mit einer kombinierten Batch/*.vbs-Lösung möglich sein.
Erstmal gespannt auf Antworten
Biber
gute Nachricht - machbar ist es. Weniger gute Nachricht: ein paar Infos fehlen (mir) noch.
Also, erstmal der Ansatz: Nur die Fonts in %windir%\Fonts kopieren reicht in der Tat nicht. Hast Du ja gemerkt.
Zusätzlich müssen die neuen Fonts auch als neue Resource hinzugefügt und "bekannt gemacht" werden.
Das läuft über zwei API-Aufrufe in der GDI32.dll und User32.dll. Das lässt sich mit einem *.vbs-Schnipsel lösen.
Dann allerdings sind diese Fonts nur für die aktuelle Windows-Session registriert. Da es ja permanent sein soll, muss noch ein Registry-Eintrag (je Font) geschrieben werden - der allerdings in HKEY_LOCAL_MACHINE.
Also wären zur handwerklichen Umsetzung Deiner Anforderung noch folgende Details hilfreich:
- diese drei Fonts haben auch feste Namen? Die man/frau "hart" ins Skript schreiben kann?
- Oder variiert das (Fontnamen in einer zusätzlichen Ini-Datei o.ä.)?
- Nur zur Sicherheit: Installation wird gemacht mit Adminrechten? wegen HKLM etc...
- Zielsysteme: ausschließlich > NT? Oder >= XP?
- in was ist denn Dein bisheriges Script geschrieben? Batch?
- werden Logdateien geschrieben?
- ist Deine bisherige Installation vollständig "unattended"? Was soll bei Fehlern ("Font konnte nicht installiert werden") passieren? MsgBox? Abbruch?
Grundsätzlich sollte es mit einer kombinierten Batch/*.vbs-Lösung möglich sein.
Erstmal gespannt auf Antworten
Biber
Moin, Hannes,
Wenn Du selbst schon skripterfahren bist, brauche ich ja nicht alles in epischer Breite ausführen. Dann lieber eine Skizze mit den nötigen Schritten.
1. Die beiden API-Functions, die Du brauchst
Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const HWND_BROADCAST = &HFFFF
Private Const WM_FONTCHANGE = &H1D
2. Die AddFontResource aufrufen mit Parameter "pfad\zum\FontFile".
Rückgabe > 0 (bzw. 1) ...Font wurde hinzugefügt
Rückgabe <= 0 Hat nicht geklappt. (ich glaube, kleiner als 0 gibts hier gar nicht ??)
3. Wenn erfolgreich, dann die SendMessage aufrufen
SendMessage HWND_BROADCAST, WM_FONTCHANGE, 0, 0
' Registrieren/bekannt machen des Fonts im System
4. Das ganze gilt aber nur für die aktive Windows-Session. Dauerhaft machen mit Schreiben eines Eintrags in HKLM
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
Jeder Font sollte im folgenden Format eingetragen werden:
Keyname: [Fontname (lesbar für den User)] z.B. "HannesFont (True Type)"
Keyinhalt: [Fontfile-Dateiname] z.B. "Hannes01.ttf".
Wenn in %windir%\Fonts installiert OHNE Pfadangabe, sonst "c:\windows\blah\Hannes01.ttf"
~~~
Das sollte es gewesen sein.
Schönen Sonntag noch
Frank / der Biber aus Bremen
Wenn Du selbst schon skripterfahren bist, brauche ich ja nicht alles in epischer Breite ausführen. Dann lieber eine Skizze mit den nötigen Schritten.
1. Die beiden API-Functions, die Du brauchst
Private Declare Function AddFontResource Lib "gdi32" Alias "AddFontResourceA" (ByVal lpFileName As String) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Const HWND_BROADCAST = &HFFFF
Private Const WM_FONTCHANGE = &H1D
2. Die AddFontResource aufrufen mit Parameter "pfad\zum\FontFile".
Rückgabe > 0 (bzw. 1) ...Font wurde hinzugefügt
Rückgabe <= 0 Hat nicht geklappt. (ich glaube, kleiner als 0 gibts hier gar nicht ??)
3. Wenn erfolgreich, dann die SendMessage aufrufen
SendMessage HWND_BROADCAST, WM_FONTCHANGE, 0, 0
' Registrieren/bekannt machen des Fonts im System
4. Das ganze gilt aber nur für die aktive Windows-Session. Dauerhaft machen mit Schreiben eines Eintrags in HKLM
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts
Jeder Font sollte im folgenden Format eingetragen werden:
Keyname: [Fontname (lesbar für den User)] z.B. "HannesFont (True Type)"
Keyinhalt: [Fontfile-Dateiname] z.B. "Hannes01.ttf".
Wenn in %windir%\Fonts installiert OHNE Pfadangabe, sonst "c:\windows\blah\Hannes01.ttf"
~~~
Das sollte es gewesen sein.
Schönen Sonntag noch
Frank / der Biber aus Bremen
Hallo,
mach Doch einfach ein MSI, da wird alles für dich erledigt.
Kann man dann sogar per AD verteilen.
Geht ganz einfach z. B. mit Installer to Go:
http://dev4pc.com/
Einfach eine Schriftart zur Installation mit einfügen.
Bob
mach Doch einfach ein MSI, da wird alles für dich erledigt.
Kann man dann sogar per AD verteilen.
Geht ganz einfach z. B. mit Installer to Go:
http://dev4pc.com/
Einfach eine Schriftart zur Installation mit einfügen.
Bob