Enable/disable ClearType in Windows7

前端 未结 8 1344
栀梦
栀梦 2021-01-04 12:00

Hi I need to enable/disable Cleartype (or \"Adjust the appearance and performance of Windows > Smooth edges of screen fonts\") via cmd (or any script like VBS/JS) or from re

相关标签:
8条回答
  • 2021-01-04 12:01

    Just to add more options, I have the C# version, adding GetFontSmoothing to it.

        [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);
        }
    
    0 讨论(0)
  • 2021-01-04 12:02

    I'm not sure how to do it without Rebooting...

    But i found that changing the FontSmoothing keys was simply not enough...

    For a full procedure on how to completely remove ClearType and FontSmoothing, check this out:

    Completley Disable Font Smoothing and ClearType in Windows 7

    0 讨论(0)
  • 2021-01-04 12:06

    Here's a PowerShell way to do it:

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

    You'll need to log off and back on for it to take effect.

    NOTE: strangely the setting doesn't show up as enabled in Performance Options, even though it's clearly turned on:

    0 讨论(0)
  • 2021-01-04 12:08

    Python version:

    # 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)
    
    0 讨论(0)
  • 2021-01-04 12:10

    Look at the stuff described in the following link:

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

    Calling the API might trigger the system-wide update so you do not have to logoff/logon to see the change.

    Of course, this is not limited to vb.net.

    0 讨论(0)
  • 2021-01-04 12:11

    The modern way of scripting under Windows is using PowerShell. The following script requires version 2.0, which is available from 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)
    }
    

    If, for some reason, you can't use PowerShell, you'll need DynamicWrapperX in order to execute WinAPI functions in WSH. You will first need to register it on the target machine, then you could use this 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
    

    Both scripts accept one parameter, 0 means disable ClearType, 1 means enable. No reboot is needed.

    0 讨论(0)
提交回复
热议问题