2011-04-15 35 views
9

嗨 我需要通過cmd(或任何腳本,如VBS/JS)或註冊表啓用/禁用Cleartype(或「調整Windows的外觀和性能>屏幕字體的平滑邊緣」 沒有註銷或Windows重新啓動。在Windows7中啓用/禁用ClearType

可能有可能啓用ClearType只爲一個應用程序

感謝與extention

回答

2

make文件。 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] 

您必須註銷有你改變

2

對我來說,以下工作: 控制面板>系統>高級系統設置>進階高級操作>(性能)設置>視覺效果>選擇「自定義」,並取消

10

在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,你要想在WSH執行WinAPI的功能需要DynamicWrapperX。首先您需要註冊它在目標機器上,那麼你可以使用這個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手段實現。不需要重新啓動。

+0

我是否複製此內容並插入並按回車或是否需要將它保存到某些PowerShell可執行文本文件並雙擊? – user1306322 2012-12-22 17:01:48

+0

@ user1306322,您複製腳本並將其保存爲'.ps1'文件。然後你可以在命令行中像'powershell'&'C:\ myscript.ps1'1''那樣運行它。不過,可以調整系統註冊表以便雙擊該文件。 – Joulukuusi 2012-12-22 17:12:27

+0

好吧,現在我得到了'File C:\ asd.ps1無法加載,因爲腳本的執行在這個系統上被禁用了.''錯誤,這似乎很常見。我想我必須先用谷歌的第一個結果來解決這個問題。 – user1306322 2012-12-23 00:08:22

3

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) 
+0

此解決方案適用。它太整潔了:-) – smartsl 2018-02-28 06:46:40

3

只是爲了增加更多的選擇,我有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); 
}