Seite 1 von 1

Bekanntgabe eines neuen Fonts unter Windows XP

Verfasst: Mittwoch 30. April 2008, 11:21
von MeckAvus
Hallo zusammen,

ich habe folgendes Problem:
Auf einem Windows XP-System soll per Python-Skript ein neuer Font installiert und nutzbar gemacht werden, ohne den Rechner neu starten zu müssen.
1.) *.ttf wird nach C:\WINDOWS\FONTS kopiert
2.) Registry-Eintrag wird geschrieben
3.) Font muss bekannt gemacht werden.

Punkt 1.) und 2.) ist kein Problem. Ich weiß auch, dass man per GDI32.dll und API-Funktion AddFontResource die Schriftart bekannt machen kann.

Nur wie kann ich das per Python-Skript erledigen?

Vielen Dank schonmal im Voraus für jede Hilfe, die da kommen möge!

:wink:

Verfasst: Mittwoch 30. April 2008, 13:46
von Leonidas
Hallo MeckAvus, willkommen im Forum,

auf Funktionen in C-DLLs kannst du mittels ctypes zugreifen.

Verfasst: Mittwoch 30. April 2008, 13:51
von lunar
Und dann gibt es natürlich von pywin32... desweiteren wünsche ich dir dann viel Spaß mit der Win-API ;)

Verfasst: Mittwoch 6. August 2008, 17:18
von knekke
Ich habe ein kleines VBScript gefunden, das Fonts installieren kann.
Allerdings gibt es z.B. wenn ein Font bereits vorhanden ist, PopUps die vom user erwarten dass dieser auf "OK" drückt. Ich habe leider auch nach mehrstündigem googeln keine Ahnung wie sich diese Popups verhindern lassen. So nützt es mir nämlich nichts :(
Hat Ansonsten evtl. jemand eine Python-Lösung inzwischen, oder weiss zufällig wie sich diese Popups umgehen lassen?

hier mal das vbscript (die zu installierende font wird als Argument übergeben):

Code: Alles auswählen

Dim strFontsPath, oApp, oShell
  
Set oShell = CreateObject("WScript.Shell")
  
Set oApp = CreateObject("Shell.Application")

  
strFontsPath = oShell.ExpandEnvironmentStrings("%WINDIR%") & "\Fonts"

oApp.Namespace(strFontsPath).CopyHere WScript.Arguments(0)
  

Set oApp = Nothing
thx,
knekke

Verfasst: Mittwoch 6. August 2008, 20:43
von HWK
Macht Dein Code denn mehr als den Font in das Windows/Fonts-Verzeichnis zu kopieren?
MfG
HWK

Verfasst: Mittwoch 6. August 2008, 22:02
von knekke
Jein!
Die fonts werden nur kopiert, aber im Gegensatz zu einem einfachen kopieren per Python (was ich natürlich vorher probiert habe), übernimmt hier der WindowsExplorer den Kopiervorgang und die Schrift wird deshalb gleich auch installiert (incl. Fortschrittsbalken und leider auch der obengenannten Fehlermeldungen).

Re: Bekanntgabe eines neuen Fonts unter Windows XP

Verfasst: Mittwoch 6. August 2008, 22:41
von HWK
MeckAvus hat geschrieben:Nur wie kann ich das per Python-Skript erledigen?

Code: Alles auswählen

import ctypes
ctypes.windll.gdi32.AddFontResourceA(dein_font)
MfG
HWK

Verfasst: Donnerstag 7. August 2008, 08:19
von knekke
Hab' ich eigentlich schonmal erwähnt, dass das hier mein absolutes lieblingsforum ist? Und dabei bin ich echt nur GelegenheitspseudoCoder...

Re: Bekanntgabe eines neuen Fonts unter Windows XP

Verfasst: Donnerstag 7. August 2008, 08:47
von lunar
HWK hat geschrieben:
MeckAvus hat geschrieben:Nur wie kann ich das per Python-Skript erledigen?

Code: Alles auswählen

import ctypes
ctypes.windll.gdi32.AddFontResourceA(dein_font)
MfG
HWK
Auf einem modernen Windows-System würde ich ja eher die W-Variante aufrufen, samt Übergabe eines Unicode-Objekts. Die Übergabe eines "wchar" dürfte von effizienter sein, da die Windows-API (iirc seit Windows 2000) intern eh Unicode nutzt, die "A"-Variante erfordert folglich nur eine zusätzliche Konvertierung.