872777825 发表于 2011-9-29 17:19:47

如何获取系统当前fonts目录下的字体列表

如题
如何获取系统当前fonts目录下的字体列表

百度搜索了半天也没找到相关例子

还烦各位老师指点下

my788522 发表于 2011-9-29 17:46:16

第一种 读注册表
$sFonts2=""
For $i=1 to 9999999
$sFonts=RegEnumVal("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",$i)
IF @error <> 0 Then ExitLoop
$sFonts2&=$sFonts
Next
$sFiltered=StringRegExpReplace($sFonts2,"((TrueType)|(Alle Aufl?sungen)|(VGA-Aufl?sung))","")
$sFiltered=StringRegExpReplace($sFiltered,"[\(\)]",",")
$sFiltered=StringReplace($sFiltered," ,,",",")
MsgBox(0,"",$sFiltered) 第二种 调用GDI32.DLL获取字体列表#include <Array.au3>
Global $aFonts

_GetSystemFonts()
_ArrayDisplay($aFonts)

Func _GetSystemFonts()
Local Const $LOGFONT = "long lfHeight;long lfWidth;long lfEscapement;long lfOrientation;long lfWeight;byte lfItalic;byte lfUnderline; byte lfStrikeout;byte lfCharSet;byte lfOutPrecision;byte lfClipPrecision;byte lfQuality;byte lfPitchAndFamily;char lfFaceName"
Local $hGDI32 = DllOpen("Gdi32.dll"), $hUser32 = DllOpen("user32.dll")
Local $hDesktop, $hDC, $iReturn
Local $hCBFunc = DllCallbackRegister("EnumFontFamExProc", "long", "ptr;ptr;dword;lparam")
Local $strctLOGFONT = DllStructCreate($LOGFONT)

DllStructSetData($strctLOGFONT, "lfCharset", 1)

$hDesktop = DllCall($hUser32, "hwnd", "GetDesktopWindow")
$hDC = DllCall($hUser32, "ptr", "GetWindowDC", "hwnd", $hDesktop)

DllCall($hGDI32, "long", "EnumFontFamiliesEx", "ptr", $hDC, "ptr", DllStructGetPtr($strctLOGFONT), "ptr", DllCallbackGetPtr($hCBFunc), "lparam", 10, "DWORD", 0)

$aFonts = _ArrayUnique($aFonts, 1, 1)
_ArraySort($aFonts, 0,1)

DllCall($hUser32, "int", "ReleaseCapture")
DllCallbackFree($hCBFunc)
DllClose($hGDI32)
DllClose($hUser32)
EndFunc   ;==>_GetSystemFonts

Func EnumFontFamExProc($pLOGFONT, $TEXTMETRIC, $dwType, $lpData)
Local Const $LOGFONT = "long lfHeight;long lfWidth;long lfEscapement;long lfOrientation;long lfWeight;byte lfItalic;byte lfUnderline; byte lfStrikeout;byte lfCharSet;byte lfOutPrecision;byte lfClipPrecision;byte lfQuality;byte lfPitchAndFamily;char lfFaceName"

ReDim $aFonts
$aFonts = DllStructGetData(DllStructCreate($LOGFONT, $pLOGFONT), "lfFaceName")

Return 1
EndFunc   ;==>EnumFontFamExProc

872777825 发表于 2011-9-29 17:49:21

回复 2# my788522


    谢谢.....谢谢回复指点

872777825 发表于 2011-9-29 17:51:10

回复 2# my788522


顺便问下像这样的   应该如何实现呢   


my788522 发表于 2011-9-29 17:58:29

你这个就更简单了 就是个遍历win目录下的fonts目录而已 看如下代码$search = FileFindFirstFile(@WindowsDir&"\fonts\*.TTF")

While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
        $size=Round(FileGetSize(@WindowsDir&"\fonts\"&$file)/1024)
    MsgBox(0,"",$file&@CR&$size )
WEnd

872777825 发表于 2011-9-29 18:15:44

回复 5# my788522

再次谢谢 my788522老师
       唉   高手指点就是感觉不一样所有问题突然感觉也简单了

还想继续问下   系统 有三种格式的字体那么...

还有怎么将获取到的字体赋值到GUI上的复选框上 ?   这个是怎么排列的 ?

还有字体卸载是怎么卸载的 ???

我看着他这个工具挺强大的想把它搞明白

如果老师有时间的话麻烦继续指点下   谢谢了

netegg 发表于 2011-9-29 19:21:50

楼主是不是根本就没自己动手的意思

my788522 发表于 2011-9-29 19:48:13

我表示鸭梨很大 楼主需要的可能是从基础开始的东西

netegg 发表于 2011-9-30 07:46:06

本帖最后由 netegg 于 2011-9-30 07:52 编辑

_ChooseFont?
页: [1]
查看完整版本: 如何获取系统当前fonts目录下的字体列表