PDA

Показать полную графическую версию : Установить и удалить шрифт


FlatX007
12-01-2010, 20:21
Как мне устанновить шрифт ?

Я вобщем делал так.

Копирую шрифт в папку Font
Создаю пустой файл font.reg
Дальше делаю мульти реговый :) файл

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts]
Дальше название шрифта

Дальше добавляю в реестр ... в реестре запись появляется ... а шрифта в списке нет :( как мне сделать то ?
Код немогу прилепить я не со своего компьютера.

Yashied
12-01-2010, 21:47
Если ты копируешь шрифт непосредственно в папку ...\WINDOWS\Fons, то в реестр не нужно ничего добавлять, оно само добавится.

Creat0R
12-01-2010, 23:49
Если ты копируешь шрифт непосредственно в папку ...\WINDOWS\Fons, то в реестр не нужно ничего добавлять, оно само добавится. »
Но тем не менее шрифт не устанавливается как положенно, я использую такую функцию:


_FileFontInstall(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir) & "\Ethnocentric.ttf", "AutoIt Font")
ConsoleWrite (http://www.autoitscript.com/autoit3/docs/functions/ConsoleWrite.htm)(@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error))

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _FileFontInstall($sSourceFile, $sFontDescript="", $sFontsPath="")
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) Const (http://www.autoitscript.com/autoit3/docs/keywords.htm#Const) $HWND_BROADCAST = 0xFFFF
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) Const (http://www.autoitscript.com/autoit3/docs/keywords.htm#Const) $WM_FONTCHANGE = 0x1D

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sFontsPath = "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sFontsPath = @WindowsDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@WindowsDir) & "\fonts"

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sFontName = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sSourceFile, "^.*\\", "")
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) FileCopy (http://www.autoitscript.com/autoit3/docs/functions/FileCopy.htm)($sSourceFile, $sFontsPath & "\" & $sFontName, 1) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, 0)

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hSearch = FileFindFirstFile (http://www.autoitscript.com/autoit3/docs/functions/FileFindFirstFile.htm)($sSourceFile)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iFontIsWildcard = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)($sFontName, "\*|\?")
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aRet, $hGdi32_DllOpen = DllOpen (http://www.autoitscript.com/autoit3/docs/functions/DllOpen.htm)("GDI32.dll")

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $hSearch = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(2, 0, 0)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $hGdi32_DllOpen = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(3, 0, 0)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$sFontName = FileFindNextFile (http://www.autoitscript.com/autoit3/docs/functions/FileFindNextFile.htm)($hSearch)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iFontIsWildcard Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sFontDescript = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sFontName, "\.[^\.]*$", "")

$aRet = DllCall (http://www.autoitscript.com/autoit3/docs/functions/DllCall.htm)($hGdi32_DllOpen, "Int", "AddFontResource", "str", $sFontsPath & "\" & $sFontName)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) IsArray (http://www.autoitscript.com/autoit3/docs/functions/IsArray.htm)($aRet) And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $aRet[0] > 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", _
$sFontDescript, "REG_SZ", $sFontsPath & "\" & $sFontName)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

DllClose (http://www.autoitscript.com/autoit3/docs/functions/DllClose.htm)($hGdi32_DllOpen)
DllCall (http://www.autoitscript.com/autoit3/docs/functions/DllCall.htm)("User32.dll", "Int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_FONTCHANGE, "int", 0, "int", 0)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) 1
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Ethnocentric.ttf (http://www.fonts4free.net/show-font.php?action=show&font=ethnocentric-font)

FlatX007
15-01-2010, 17:50
Пасиба работает =)

Но "косячок" один ...если шрифт переименован и в папке Font есть с таким же названием ... то ничего непоставится. Я думаю сравнивать по метаданным (в свойствах файла) - но этоя уже сам.

FlatX007
17-01-2010, 02:30
А как правильно удалить шрифт ?

Удаляю из папки и из реестра он всё равно числится в списке ... и даже открывается.

Creat0R
17-01-2010, 14:29
как правильно удалить шрифт ? »
Примерно так:

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _FileFontUnInstall($sFontFile)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) Const (http://www.autoitscript.com/autoit3/docs/keywords.htm#Const) $HWND_BROADCAST = 0xFFFF
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) Const (http://www.autoitscript.com/autoit3/docs/keywords.htm#Const) $WM_FONTCHANGE = 0x1D

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sFontsPath = @WindowsDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@WindowsDir) & "\fonts"
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sFontName = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sFontFile, "^.*\\", "")
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @extended (http://www.autoitscript.com/autoit3/docs/macros.htm#@extended) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) $sFontsPath = StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($sFontFile, "\\[^\\]*$", "")

Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aRet = DllCall (http://www.autoitscript.com/autoit3/docs/functions/DllCall.htm)("Gdi32.dll", "Int", "RemoveFontResourceW", "wstr", $sFontsPath & "\" & $sFontName)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) IsArray (http://www.autoitscript.com/autoit3/docs/functions/IsArray.htm)($aRet) And (http://www.autoitscript.com/autoit3/docs/keywords.htm#And) $aRet[0] > 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $iEnum = 0, $sRegVal = "", $sRegRead
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sRegFontsPath = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts"

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$iEnum += 1
$sRegVal = RegEnumVal (http://www.autoitscript.com/autoit3/docs/functions/RegEnumVal.htm)($sRegFontsPath, $iEnum)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) <> 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)

$sRegRead = RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)($sRegFontsPath, $sRegVal)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sRegRead = $sFontsPath & "\" & $sFontName Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) $sRegRead = $sFontName Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
RegDelete (http://www.autoitscript.com/autoit3/docs/functions/RegDelete.htm)($sRegFontsPath, $sRegVal)
DllCall (http://www.autoitscript.com/autoit3/docs/functions/DllCall.htm)("User32.dll", "Int", "SendMessage", "hwnd", $HWND_BROADCAST, "int", $WM_FONTCHANGE, "int", 0, "int", 0)
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) 1
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)




© OSzone.net 2001-2012