
Frage: Ich möchte (aus welchen Gründen auch immer) für den aktuell angemeldeten Benutzer das ClearType von Windows ausschalten. Wie geht das?
Antwort: ClearType lässt sich unter Windows 7/8/10 mittels ClearType-Textoptimierungs-Program (cctune.exe) über die Bordmittel von Windows ein- bzw ausschalten und konfigurieren:
Dabei handelt es sich um eine Pro-User-Einstellung. Microsoft selbst stellt dafür den WinAPI-Befehl SystemParametersInfo bereit; mittels passender Aktion kann man hier das ClearType Verhalten beeinflussen.
Quick-and-Dirty Lösung (bitte weiter lesen!):
Ausschalten:
SystemParametersInfo(SPI_SETFONTSMOOTHING,0,0,0); InvalidateRect(0, nil, True);
Einschalten:
SystemParametersInfo(SPI_SETFONTSMOOTHING,1,0,0); InvalidateRect(0, nil, True);
Das jeweilige Absetzung von InvalidateRect(0, nil, True); erzeugt dabei einen kompletten Screen-Refresh....
Die Original-Paramter sind
BOOL WINAPI SystemParametersInfo( _In_ UINT uiAction, _In_ UINT uiParam, _Inout_ PVOID pvParam, _In_ UINT fWinIni );
Man kann, sollte das etwas besser gestalten
Einschalten:
SystemParametersInfo(SPI_SETFONTSMOOTHING, Cardinal(true), 0, SPIF_UPDATEINIFILE OR SPIF_SENDCHANGE); SystemParametersInfo(SPI_SETFONTSMOOTHINGTYPE, FE_FONTSMOOTHINGCLEARTYPE, 0, SPIF_UPDATEINIFILE OR SPIF_SENDCHANGE);
Ausschalten:
SystemParametersInfo(SPI_SETFONTSMOOTHING, Cardinal(false), 0, SPIF_UPDATEINIFILE OR SPIF_SENDCHANGE);
Dadurch erreicht man beim Einschalten vier Dinge:
- Cardinaltype wird richtig/leserlicher gesetzt
- Durch SPIF_UPDATEINIFILE wird das auch persistent in der Windows-Umgebung gespeichert
- Durch SPIF_SENDCHANGE wird auch gleich die Message zur Aktualisierung der Oberfläche gesendet (ein InvalidateRect ist nicht mehr nötig)
- Durch eine zusätzliche "Action" SPI_SETFONTSMOOTHINGTYPE wird der Type des ClearType gesetzt (siehe MSDN-Doku-Link weiter oben)
Beim Ausschalten erreicht man nur bessere/konformere Lesbarkeit und das senden der Window-Message zur Aktualisierung.