Включить / отключить ClearType в Windows7 - PullRequest
9 голосов
/ 15 апреля 2011

Привет Мне нужно включить / отключить Cleartype (или «Настроить внешний вид и производительность Windows> Сглаживание краев экранных шрифтов») через cmd (или любой скрипт, например VBS / JS) или из реестра без выхода из системы или Windows перезапускать.

Может быть, возможно включить ClearType только для одного приложения

Спасибо

Ответы [ 8 ]

11 голосов
/ 22 декабря 2012

Современный способ написания сценариев под Windows - это использование PowerShell. Для следующего сценария требуется версия 2.0, доступная в Windows XP SP3:

#requires -version 2.0
param([bool]$enable)

$signature = @'
[DllImport("user32.dll")]
public static extern bool SystemParametersInfo(
    uint uiAction,
    uint uiParam,
    uint pvParam,
    uint fWinIni);
'@

$SPI_SETFONTSMOOTHING      = 0x004B
$SPI_SETFONTSMOOTHINGTYPE  = 0x200B
$SPIF_UPDATEINIFILE        = 0x1
$SPIF_SENDCHANGE           = 0x2
$FE_FONTSMOOTHINGCLEARTYPE = 0x2

$winapi = Add-Type -MemberDefinition $signature -Name WinAPI -PassThru

if ($enable)
{
    [void]$winapi::SystemParametersInfo($SPI_SETFONTSMOOTHING, 1, 0, $SPIF_UPDATEINIFILE -bor $SPIF_SENDCHANGE)
    [void]$winapi::SystemParametersInfo($SPI_SETFONTSMOOTHINGTYPE, 0, $FE_FONTSMOOTHINGCLEARTYPE, $SPIF_UPDATEINIFILE -bor $SPIF_SENDCHANGE)
}
else
{
    [void]$winapi::SystemParametersInfo($SPI_SETFONTSMOOTHING, 0, 0, $SPIF_UPDATEINIFILE -bor $SPIF_SENDCHANGE)
}

Если по какой-то причине вы не можете использовать PowerShell, вам потребуется DynamicWrapperX для выполнения функций WinAPI в WSH. Сначала вам нужно зарегистрировать его на целевом компьютере, затем вы можете использовать этот VBScript:

Set WinAPI = CreateObject("DynamicWrapperX")
WinAPI.Register "user32.dll", "SystemParametersInfo", "i=uuuu"

Const SPI_SETFONTSMOOTHING      = &H004B
Const SPI_SETFONTSMOOTHINGTYPE  = &H200B
Const SPIF_UPDATEINIFILE        = &H1
Const SPIF_SENDCHANGE           = &H2
Const FE_FONTSMOOTHINGCLEARTYPE = &H2

If WScript.Arguments(0) Then
    WinAPI.SystemParametersInfo SPI_SETFONTSMOOTHING, 1, 0, SPIF_UPDATEINIFILE Or SPIF_SENDCHANGE
    WinAPI.SystemParametersInfo SPI_SETFONTSMOOTHINGTYPE, 0, FE_FONTSMOOTHINGCLEARTYPE, SPIF_UPDATEINIFILE Or SPIF_SENDCHANGE
Else
    WinAPI.SystemParametersInfo SPI_SETFONTSMOOTHING, 0, 0, SPIF_UPDATEINIFILE Or SPIF_SENDCHANGE
End If

Оба сценария принимают один параметр, 0 означает отключение ClearType, 1 означает включение. Перезагрузка не требуется.

6 голосов
/ 07 сентября 2016

Просто чтобы добавить больше опций, у меня есть версия C #, добавляющая к ней GetFontSmoothing.

    [DllImport("user32.dll", SetLastError = true)]
    static extern bool SystemParametersInfo(uint uiAction, uint uiParam, ref int pvParam, uint fWinIni);

    const uint SPI_GETFONTSMOOTHING = 74;
    const uint SPI_SETFONTSMOOTHING = 75;
    const uint SPI_UPDATEINI = 0x1;
    const UInt32 SPIF_UPDATEINIFILE = 0x1;

    private Boolean GetFontSmoothing()
    {
        bool iResult;
        int pv = 0;
        /* Call to systemparametersinfo to get the font smoothing value. */
        iResult = SystemParametersInfo(SPI_GETFONTSMOOTHING, 0, ref pv, 0);
        if (pv > 0)
        {
            //pv > 0 means font smoothing is on.
            return true;
        }
        else
        {
            //pv == 0 means font smoothing is off.
            return false;
        }
    }

    private void DisableFontSmoothing()
    {
        bool iResult;
        int pv = 0;
        /* Call to systemparametersinfo to set the font smoothing value. */
        iResult = SystemParametersInfo(SPI_SETFONTSMOOTHING, 0, ref pv, SPIF_UPDATEINIFILE);
        Console.WriteLine("Disabled: {0}", iResult);
    }

    private void EnableFontSmoothing()
    {
        bool iResult;
        int pv = 0;
        /* Call to systemparametersinfo to set the font smoothing value. */
        iResult = SystemParametersInfo(SPI_SETFONTSMOOTHING, 1, ref pv, SPIF_UPDATEINIFILE);
        Console.WriteLine("Enabled: {0}", iResult);
    }
3 голосов
/ 20 марта 2013

Python версия:

# make sure you install pywin32 
# from http://sourceforge.net/projects/pywin32/files/pywin32/Build%20218/
import win32con
import win32gui

win32gui.SystemParametersInfo(win32con.SPI_SETFONTSMOOTHING, True, 0) # enable only
win32gui.SystemParametersInfo(win32con.SPI_SETFONTSMOOTHINGTYPE,
        win32con.FE_FONTSMOOTHINGCLEARTYPE,
        win32con.SPIF_UPDATEINIFILE | win32con.SPIF_SENDCHANGE)
2 голосов
/ 03 октября 2011

У меня работает следующее: Панель управления> Система> Расширенные настройки системы> Расширенные> (Производительность) Настройки> Визуальные эффекты> Выберите «Пользовательский» и снимите флажок «Плавные края экранных шрифтов»

2 голосов
/ 22 июня 2011

Я не уверен, как это сделать без перезагрузки ...

Но я обнаружил, что просто недостаточно поменять клавиши FontSmoothing ...

Для полной процедуры о том, какчтобы полностью удалить ClearType и FontSmoothing, проверьте это:

Полностью отключите сглаживание шрифтов и ClearType в Windows 7

2 голосов
/ 15 апреля 2011

сделать файл с расширением. reg это реестр для файлов

Disable_Smooth_edges_of_screen_fonts

[HKEY_CURRENT_USER\Control Panel\Desktop]
"FontSmoothing"="0"

Enable_Smooth_edges_of_screen_fonts

[HKEY_CURRENT_USER\Control Panel\Desktop]
"FontSmoothing"="2"

вы также можете сделать это с помощью cmd здесьявляется синтаксисом для команды

REG ADD KeyName [/v ValueName | /ve] [/t Type] [/s Separator] [/d Data] [/f]

, вы должны выйти из системы, чтобы эффект, который вы изменили

1 голос
/ 31 мая 2012

Посмотрите на материал, описанный в следующей ссылке:

http://www.vbforums.com/showthread.php?t=491091

Вызов API может вызвать обновление всей системы, поэтому вам не нужно выходить из системы или входить в систему, чтобы увидетьизменить.

Конечно, это не ограничивается vb.net.

0 голосов
/ 18 февраля 2019

Вот способ PowerShell сделать это:

Set-ItemProperty 'HKCU:\Control Panel\Desktop\' -Name FontSmoothing -Value "2"

Вам потребуется выйти и снова войти, чтобы он вступил в силу.

ПРИМЕЧАНИЕ: как ни странно, этот параметр не отображается как включенный в Performance Опции, даже если они явно включены:

enter image description here

...