找回密码
 加入
搜索
查看: 2654|回复: 8

[AU3基础] 如何获取系统当前fonts目录下的字体列表

  [复制链接]
发表于 2011-9-29 17:19:47 | 显示全部楼层 |阅读模式
如题
如何获取系统当前fonts目录下的字体列表

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

还烦各位老师指点下
发表于 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[1]

_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[32]"
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[0])

DllCall($hGDI32, "long", "EnumFontFamiliesEx", "ptr", $hDC[0], "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[32]"

ReDim $aFonts[UBound($aFonts)+1]
$aFonts[UBound($aFonts)-1] = DllStructGetData(DllStructCreate($LOGFONT, $pLOGFONT), "lfFaceName")

Return 1
EndFunc   ;==>EnumFontFamExProc
 楼主| 发表于 2011-9-29 17:49:21 | 显示全部楼层
回复 2# my788522


    谢谢.....谢谢回复指点
 楼主| 发表于 2011-9-29 17:51:10 | 显示全部楼层
回复 2# 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
 楼主| 发表于 2011-9-29 18:15:44 | 显示全部楼层
回复 5# my788522

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

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

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

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

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

如果老师有时间的话  麻烦继续指点下   谢谢了
发表于 2011-9-29 19:21:50 | 显示全部楼层
楼主是不是根本就没自己动手的意思
发表于 2011-9-29 19:48:13 | 显示全部楼层
我表示鸭梨很大 楼主需要的可能是从基础开始的东西
发表于 2011-9-30 07:46:06 | 显示全部楼层
本帖最后由 netegg 于 2011-9-30 07:52 编辑

_ChooseFont?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 09:52 , Processed in 0.084431 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表