找回密码
 加入
搜索
查看: 4867|回复: 19

字体删除程序,写不下去了

[复制链接]
发表于 2008-11-3 23:03:33 | 显示全部楼层 |阅读模式
在网上看到一个字体删除程序:


今天试着做了一个,目前遇到一些困难,寻求帮助。


程序目的:
1/(已实现)寻找字体文件夹下所有 TTF 字体并形成树状列表;
2/(已实现)预设一些可以删除的字体,若存在,则默认选定;
3/(未实现)单击一个按钮,删除选定的字体。
现在的难题是,无法得到复选框后面的字体名,请高手帮忙完成这个代码。
GUIctrlRead 只能得到复选框的状态,而不能得到其后的文本。

#include <GuiConstantsEx.au3>
#include <GuiTreeView.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <Array.au3>

$Debug_TV = False 

Global $hItem, $hTreeView,$search
Global $iStyle = BitOR($TVS_EDITLABELS, $TVS_HASBUTTONS, $TVS_HASLINES, $TVS_LINESATROOT, $TVS_DISABLEDRAGDROP, $TVS_SHOWSELALWAYS, $TVS_CHECKBOXES)
        
FileChangeDir(@WindowsDir&"\fonts\")
dim $i=0,$size=0
_filelist("C:\Windows\Fonts\")

$main=GUICreate("Test - Newbie", 400, 300)

        $hTreeView = GUICtrlCreateTreeView(5, 20, 250, 268, $iStyle, $WS_EX_CLIENTEDGE)
        GUISetFont (9,400,1,"Tahoma")

        $label=GUICtrlCreateLabel("左边默认选定的字体都是多余的英文字体,删除他们不会对您的系统造成影响。",270,20,120,60)
        $button1=GUICtrlCreateButton("删除左边"&@CRLF&"选定的字体",270,90,100,50,$BS_MULTILINE)

        GUISetState()

$search = FileFindFirstFile("*.ttf") 


For $x = 1 To $i
        $file = FileFindNextFile($search)
        If $file <> "" Then
                $filesize=Round(FileGetSize(@WindowsDir&"\fonts\"&$file)/1024,1)
                $x= GUICtrlCreateTreeViewItem($file&" ,  "&$filesize&" KB",$hTreeView)
                If $file= "ANTQUAB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "ANTQUABI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "ANTQUAI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "ARIALN.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "ARIALNB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "ARIALNBI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "ARIALNI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "BKANT.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "BOOKOS.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "BOOKOSB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "BOOKOSBI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "BOOKOSI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "BSSYM7.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CALIBRI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CALIBRIB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CALIBRII.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CALIBRIZ.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CAMBRIA.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CAMBRIAB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CAMBRIAI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CAMBRIAZ.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CANDARA.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CANDARAB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CANDARAI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CANDARAZ.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CENTURY.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSOLA.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSOLAB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSOLAI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSOLAZ.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSTAN.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSTANB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSTANI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CONSTANZ.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CORBEL.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CORBELB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CORBELI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "CORBELZ.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "GARA.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "GARABD.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "GARAIT.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "georgia.ttf" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "georgiab.ttf" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "georgiai.ttf" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "georgiaz.ttf" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "GOTHIC.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "GOTHICB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "GOTHICBI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "GOTHICI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "MSMINCHO.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "MTCORSVA.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "REFSAN.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "REFSPCL.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "SEGOEUI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "SEGOEUIB.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "SEGOEUII.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "SEGOEUIZ.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "SIMLI.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "SIMYOU.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "WINGDNG2.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
                If $file= "WINGDNG3.TTF" Then
                        GUICtrlSetState($x,$gui_Checked)
                EndIf
        EndIf
Next
        FileClose($search)

;WinSetOnTop($main,"",1)


While 1
        $msg = GUIGetMsg()
                Select
                        Case $msg = $GUI_EVENT_CLOSE
                                Exit
                EndSelect
WEnd

Func _filelist($searchdir)        ;统计文件个数
        $search = FileFindFirstFile($searchdir & "*.ttf")
        If $search = -1 Then return -1                   ;;;;如果找不到,返回值 -1 
        While 1 
                $file = FileFindNextFile($search)         ;;;查找下一个文件 
                If @error Then                          ;;;如果找不到文件 
                        FileClose($search)                     ;;;则关闭此句柄 
                        return                                ;;返回 
                EndIf
                $i=$i+1 
        WEnd 
EndFunc


[ 本帖最后由 新手上路 于 2008-12-13 21:20 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2008-11-4 11:05:06 | 显示全部楼层
顶上去                                         .
发表于 2008-11-4 14:39:18 | 显示全部楼层
$i =1
while 1
        $font= RegEnumVal("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", $i)
if @error <>0 then
   exitloop
else
  $fontdocname = RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" , $font)
  ConsoleWrite($fontdocname & @CRLF)
endif
$i=$i+1
wend
从注册表走一下,对比多余文件删除就行了

[ 本帖最后由 netegg 于 2008-11-4 14:41 编辑 ]
 楼主| 发表于 2008-11-4 15:01:24 | 显示全部楼层
原帖由 netegg 于 2008-11-4 14:39 发表
$i =1
while 1
        $font= RegEnumVal("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", $i)
if @error 0 then
   exitloop
else
  $fontdocname = RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\Cur ...

你这个代码实际还是得到字体列表(我在前面已用不同的方法实现),不是我所要求的得到已选定的复选框后面的字体名。

[ 本帖最后由 新手上路 于 2008-11-4 15:04 编辑 ]
发表于 2008-11-4 16:06:37 | 显示全部楼层
#include <GuiTreeView.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <TreeViewConstants.au3>
Opt("GUIOnEventMode", 1)
Global $item,$text
$msg = GUIGetMsg()
$Form3 = GUICreate("字体设置", 223, 304, 344, 197)
$hTreeview = GUICtrlCreateTreeView(9, 10, 205, 227)
GUICtrlCreateButton("显示列表", 9, 283, 205, 17, 0)
GUICtrlSetOnEvent(-1, "button1click")
GUICtrlCreateButton("选择", 9, 262, 94, 17, 0)
GUICtrlSetOnEvent(-1, "ok")
GUISetOnEvent($GUI_EVENT_CLOSE, "Form3Close")
GUISetState(@SW_SHOW)
While 1
        Sleep(100)
WEnd
Func button1click()
    $i =1
    while 1
                $key = RegEnumVal("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", $i)
                $doc = RegRead("HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts", $key)
      select
             Case @error <>0
            exitloop
         case  $doc <> ""
            GUICtrlCreateTreeViewItem($doc, $hTreeview)
           EndSelect
           $i=$i+1
    wend
endfunc
Func ok()
                        $item = GUICtrlRead($hTreeview)
            $text = GUICtrlRead($item, 1)
        msgbox("","",$text)
EndFunc
Func Form3Close()
        Exit
EndFunc

[ 本帖最后由 netegg 于 2008-11-4 16:07 编辑 ]
 楼主| 发表于 2008-11-4 17:00:25 | 显示全部楼层
楼上的兄弟辛苦了,你提供了一种思路:

        $item = GUICtrlRead($hTreeview)
        $text = GUICtrlRead($item, 1)
        MsgBox("", "", $text)

读取选中的项目文本,是基于项目被选中的情况下。而与前面的复选框无关。
我所要实现的目的是,项目前面的复选框和项目文本关联起来,通过复选框ID,就能得到后面的项目文本。

[ 本帖最后由 新手上路 于 2008-11-4 20:54 编辑 ]
发表于 2008-11-4 17:08:26 | 显示全部楼层
原帖由 新手上路 于 2008-11-4 17:00 发表
楼上的兄弟辛苦了,你提供了一种思路:

        $item = GUICtrlRead($hTreeview)
        $text = GUICtrlRead($item, 1)
        MsgBox("", "", $text)

读取选中的项目文本,是基于项目被选中的情况下。而与前面的复选框无关。 ...

那你可以GUICTRLREAD($ITEM)后再GUICTRLREAD($ITEM,1)
 楼主| 发表于 2008-11-4 17:34:54 | 显示全部楼层
原帖由 liongodmien 于 2008-11-4 17:08 发表

那你可以GUICTRLREAD($ITEM)后再GUICTRLREAD($ITEM,1)


在我这个实例中,直接使用了数字作为 item 的变量名,因而就无法使用 GUICtrlRead($item) 啦
发表于 2008-11-4 18:18:28 | 显示全部楼层
treeviewitem有id吗?
发表于 2008-11-4 18:24:25 | 显示全部楼层
如果真要这么做,也不是不行,简单点的,你不妨另做一个附加的文本框,把选择的不要的字体文件名全都输入到文本框里,一块处理,岂不更简单,而且还可以还原,比这个更好吧
 楼主| 发表于 2008-11-4 18:35:40 | 显示全部楼层
原帖由 netegg 于 2008-11-4 18:24 发表
如果真要这么做,也不是不行,简单点的,你不妨另做一个附加的文本框,把选择的不要的字体文件名全都输入到文本框里,一块处理,岂不更简单,而且还可以还原,比这个更好吧


我提的这个问题其实是为了讨论实现过程,而不是结果。你说的这个方法也可以,但还是没我的好。因为如果使用者没弄清楚就误删除文本框里的字体名,需要修改时只能重新加载。而我这个只需要鼠标简单的点击即可。
发表于 2008-11-4 18:52:10 | 显示全部楼层
明白了,取项目句柄,和后面的文本结合成一个二维变量就行了
发表于 2008-11-4 20:02:12 | 显示全部楼层
原帖由 新手上路 于 2008-11-4 17:34 发表


在我这个实例中,直接使用了数字作为 item 的变量名,因而就无法使用 GUICtrlRead($item) 啦

那个$item不过是个例子而已!实际中你可以用任意的$XXXXX
 楼主| 发表于 2008-11-4 20:52:31 | 显示全部楼层
原帖由 liongodmien 于 2008-11-4 20:02 发表

那个$item不过是个例子而已!实际中你可以用任意的$XXXXX


我也是举例,呵呵
发表于 2008-11-4 22:21:36 | 显示全部楼层
你的问题应该是:
项目内容 = GUICtrlRead( 项目ID, 1 )
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-5-10 23:31 , Processed in 0.095860 second(s), 20 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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