zhenglei 发表于 2009-4-8 20:35:52

▲▲▲关于AU3的搜索 功能实现--- 高级功能探讨~~~▲▲▲

提问: AU3目录的搜索:
现已加入AU3搜索模块。。 问题是 无论用 FileFindFirstFileFileFindNextFile还是_FileListToArray 均无法实现
所以逼不得已 才请老大们出来看一下。。

实现功能要求:用户输入 搜索内容之后。 便开始在读取到的配置文件路径中 进行搜索...如搜索到相关目录则打开相关目录使用命令($oIE.navigate)否则给一个Msgbox (无此信息)   只要实现这个就可以了。。

如果以上功能实现后。。 试问一下如果在目录搜索期间   发现2 个或者更多相同或类似目录后 。最好能弹个表出现贡用户选择。。 例如输入 "AAA" 在搜索期间发现带有AAA字符的所有目录最后都能列入弹出的表中。。 当用户点击相应的目录名时 则 打开 点击目录所在位置使用命令($oIE.navigate)   

高难度问题。。 保证没人提出过。。。

config.ini 配置文件内容如下:

        config.ini内容
       
        [测试]
        网络游戏=d:
        本地游戏=E:


源代码如下:

#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <IE.au3>
#include <File.au3>
#include <Array.au3>
#include <StaticConstants.au3>
Opt("GUIOnEventMode", 1);OnEvent模式

$title = "游戏目录搜索"
Global $Button,$i,$i2,$keys
Local $Total = IniReadSection("config.ini", "测试")
If WinExists($title) Then Exit
AutoItWinSetTitle($title)
_IEErrorHandlerRegister()
$oIE = ObjCreate("Shell.Explorer.2")
$Form1 = GUICreate($title, 900, 525)
GUISetOnEvent($GUI_EVENT_CLOSE, "set")
$Keys_Input = GUICtrlCreateInput("搜索内容", 625, 90, 89, 21)
GUICtrlSetColor(-1, 0x0A7604)
GUICtrlSetOnEvent($Keys_Input, "set")
GUICtrlSetTip(-1, "请输入搜索内容")
$search = GUICtrlCreateButton("开始搜索", 733, 90, 56, 22, 0)
GUICtrlSetOnEvent($search, "set")
$Group1 = GUICtrlCreateGroup("★游戏目录", 8, 112, 81, 385)
GUICtrlCreateGroup("", -99, -99, 1, 1)

$s = 104
$s2 = 0
Dim $but, $job4, $link


For $I = 1 To $Total

        $s2 = $s + 40
        $s = $s2

        $Button[$I] = GUICtrlCreateButton($Total[$I], 16, $s2, 64, 25, 0)
;~         按钮文字为INI等号左边的值,$Button[$I]为按钮控件ID

        $Button[$I] = $Total[$I];
;~         $Button[$I] 为INI等号右边的值,即要运行的程序。

        GUICtrlSetOnEvent($Button[$I], "B_Msg")
        GUICtrlSetTip($Button[$I], "点击观看→" & $Total[$I])

;~         将按钮点击注册到函数 B_Msg()

Next


$oIE.navigate("c:\")
ControlListView($title, "", "SysListView321", "ViewChange", "smallicons")
$GUIActiveX = GUICtrlCreateObj($oIE, 90, 117, 786, 380)

GUISetState()






While 1

        Sleep(100)

WEnd



Func set()


        Select

                Case @GUI_CtrlId = $search
                        $keys = GUICtrlRead($Keys_Input)
                        If $keys <> "" And $keys <> "搜索内容" Then
                                gosearch()
                        Else
                                MsgBox(64, "提示:", "请输入目录名称")
                        EndIf

                Case @GUI_CtrlId = $GUI_EVENT_CLOSE
                        Exit


        EndSelect

EndFunc   ;==>set
       

Func gosearch() ;查找目录 ==============搜索目录段就这里搞不定了。。。
    $keys2 = "\"&$keys&"*"
        ;$keys&"*"
For $I = 1 To $Total
$FileList = _FileListToArray($Total, $keys2, 2)
        MsgBox(64,"PATH",$Total[$i]&$keys2)
        If @error = 1 Then
                MsgBox(0, "", "No Files\Folders Found.")
        ElseIf @error = 4 Then
                MsgBox(0, "非常抱歉:", "没找到该目录,请于管理员联系!")
        Else

msgbox(64,"box",$FileList)

EndIf
                        ;MsgBox(0, "", $FileList)
                Next
EndFunc   ;==>gosearch


Func B_Msg()
        ;MsgBox(64,"asdf","TEST")
        dim $s3
        For $I2 = 1 To UBound($Button, 1) - 1

                If @GUI_CtrlId = $Button[$I2] Then$oIE.navigate($Button[$I2])       
               

Next
        ;MsgBox(64,"asdf",$s3)
EndFunc   ;==>B_Msg

[ 本帖最后由 zhenglei 于 2009-4-8 20:41 编辑 ]

zhenglei 发表于 2009-4-8 20:40:44

ddddddddddddddddd

自己先顶一下。。

ceoguang 发表于 2009-4-8 21:05:16

你这个只能搜索根目录,当然不行了.论坛有很多相关的代码,要学会搜索

#include <File.au3>

_FileRecur(@windowsDir)
msgBox(64, '', 'done')

Func _FileRecur($_Path)
        $folder = _FileListToArray($_Path, "*", 2)
        If not IsArray($folder) then return 0
        For $o = 1 to $folder
                msgBox(0, '', $_Path & "\" & $folder[$o])
                _FileRecur($_Path & "\" & $folder[$o])
        Next
EndFunc        ;==>_FileRecur()

zhenglei 发表于 2009-4-8 21:20:26

ddddddddd

原帖由 ceoguang 于 2009-4-8 21:05 发表 http://www.autoitx.com/images/common/back.gif
你这个只能搜索根目录,当然不行了.论坛有很多相关的代码,要学会搜索

#include

_FileRecur(@windowsDir)
msgBox(64, '', 'done')

Func _FileRecur($_Path)
        $folder = _FileListToArray($_Path, "*" ...

回复的很好。。 不知如何做个表出来呢???? 供用户选择需要的相应目录

sensel 发表于 2009-4-8 21:31:00

_FileAllListToArray
GUICtrlCreateListView, GUICtrlCreateListViewItem
这个实在不算高难度

llztt 发表于 2009-4-8 22:13:08

不是高级不高级的问题,而是复杂不复杂的问题,其实也算不上复杂。。

遍历配置文件的目录(包含子目录,源码论坛忒多了),找到目标文件就放到某数组中,寻找完毕后,把数组中的值显示到GUI(譬如用LISTVIEW)中,供用户选择打开。。无非是各个小功能的堆砌。。

wangyuan0 发表于 2009-4-9 14:04:34

我原来搞过一个模糊搜索指定目录下所有关键字的东西
用到的是
FileFindFirstFile

FileFindNextFile
可以搜索指定目录下面所有关键字的目录并显示出来点哪个打开哪个

akmm88 发表于 2009-4-9 19:22:15

高级功能?
AU3搜索目录的速度,会让人喷血.
你这个想法有点那个.EXPLORER 的地址栏,本来就有这个功能,而且速度快.

真想弄的话, 去搜索 下 WIN32_FIND_DATA , 速度上会提升不少.

yzh016 发表于 2009-7-29 22:10:26

dddddddddddddddddd
页: [1]
查看完整版本: ▲▲▲关于AU3的搜索 功能实现--- 高级功能探讨~~~▲▲▲