Bekanntgabe eines neuen Fonts unter Windows XP

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
MeckAvus
User
Beiträge: 1
Registriert: Mittwoch 30. April 2008, 11:03

Bekanntgabe eines neuen Fonts unter Windows XP

Beitragvon MeckAvus » Mittwoch 30. April 2008, 11:21

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:
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 30. April 2008, 13:46

Hallo MeckAvus, willkommen im Forum,

auf Funktionen in C-DLLs kannst du mittels ctypes zugreifen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Beitragvon lunar » Mittwoch 30. April 2008, 13:51

Und dann gibt es natürlich von pywin32... desweiteren wünsche ich dir dann viel Spaß mit der Win-API ;)
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Beitragvon knekke » Mittwoch 6. August 2008, 17:18

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
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Beitragvon HWK » Mittwoch 6. August 2008, 20:43

Macht Dein Code denn mehr als den Font in das Windows/Fonts-Verzeichnis zu kopieren?
MfG
HWK
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Beitragvon knekke » Mittwoch 6. August 2008, 22:02

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).
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Re: Bekanntgabe eines neuen Fonts unter Windows XP

Beitragvon HWK » Mittwoch 6. August 2008, 22:41

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
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Beitragvon knekke » Donnerstag 7. August 2008, 08:19

Hab' ich eigentlich schonmal erwähnt, dass das hier mein absolutes lieblingsforum ist? Und dabei bin ich echt nur GelegenheitspseudoCoder...
lunar

Re: Bekanntgabe eines neuen Fonts unter Windows XP

Beitragvon lunar » Donnerstag 7. August 2008, 08:47

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.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]