嗨 我需要通過cmd(或任何腳本,如VBS/JS)或註冊表啓用/禁用Cleartype(或「調整Windows的外觀和性能>屏幕字體的平滑邊緣」 沒有註銷或Windows重新啓動。在Windows7中啓用/禁用ClearType
可能有可能啓用ClearType只爲一個應用程序
感謝與extention
嗨 我需要通過cmd(或任何腳本,如VBS/JS)或註冊表啓用/禁用Cleartype(或「調整Windows的外觀和性能>屏幕字體的平滑邊緣」 沒有註銷或Windows重新啓動。在Windows7中啓用/禁用ClearType
可能有可能啓用ClearType只爲一個應用程序
感謝與extention
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]
您必須註銷有你改變
我不知道該怎麼做,無需重新啓動的效果......
但我發現改變FontSmoothing鑰匙是根本不夠......
對於全如何徹底刪除的ClearType和FontSmoothing程序,檢查了這一點:
Completley Disable Font Smoothing and ClearType in Windows 7
對我來說,以下工作: 控制面板>系統>高級系統設置>進階高級操作>(性能)設置>視覺效果>選擇「自定義」,並取消
看「平滑屏幕字體邊緣」在下面的鏈接中描述的東西:
http://www.vbforums.com/showthread.php?t=491091
調用API可能觸發系統範圍的更新,因此您不必註銷/登錄即可查看更改。
當然,這不僅限於vb.net。
在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
手段實現。不需要重新啓動。
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)
此解決方案適用。它太整潔了:-) – smartsl 2018-02-28 06:46:40
只是爲了增加更多的選擇,我有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);
}
我是否複製此內容並插入並按回車或是否需要將它保存到某些PowerShell可執行文本文件並雙擊? – user1306322 2012-12-22 17:01:48
@ user1306322,您複製腳本並將其保存爲'.ps1'文件。然後你可以在命令行中像'powershell'&'C:\ myscript.ps1'1''那樣運行它。不過,可以調整系統註冊表以便雙擊該文件。 – Joulukuusi 2012-12-22 17:12:27
好吧,現在我得到了'File C:\ asd.ps1無法加載,因爲腳本的執行在這個系統上被禁用了.''錯誤,這似乎很常見。我想我必須先用谷歌的第一個結果來解決這個問題。 – user1306322 2012-12-23 00:08:22