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

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

[复制链接]
发表于 2009-4-8 20:35:52 | 显示全部楼层 |阅读模式
提问: AU3  目录的搜索:
现已加入AU3搜索模块。。 问题是 无论用 FileFindFirstFile  FileFindNextFile  还是_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[50][2],$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[0][0]

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

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

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

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

;~         将按钮点击注册到函数 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[0][0]
$FileList = _FileListToArray($Total, $keys2, 2)
        MsgBox(64,"PATH",$Total[$i][1]&$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][0] Then  $oIE.navigate($Button[$I2][1])       
               

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

[ 本帖最后由 zhenglei 于 2009-4-8 20:41 编辑 ]
 楼主| 发表于 2009-4-8 20:40:44 | 显示全部楼层

ddddddddddddddddd

自己先顶一下。。
发表于 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[0]
                msgBox(0, '', $_Path & "\" & $folder[$o])
                _FileRecur($_Path & "\" & $folder[$o])
        Next
EndFunc        ;==>_FileRecur()
 楼主| 发表于 2009-4-8 21:20:26 | 显示全部楼层

ddddddddd

原帖由 ceoguang 于 2009-4-8 21:05 发表
你这个只能搜索根目录,当然不行了.论坛有很多相关的代码,要学会搜索
[au3]
#include

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

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


回复的很好。。 不知如何做个表出来呢???? 供用户选择需要的相应目录
发表于 2009-4-8 21:31:00 | 显示全部楼层
_FileAllListToArray
GUICtrlCreateListView, GUICtrlCreateListViewItem
这个实在不算高难度
发表于 2009-4-8 22:13:08 | 显示全部楼层
不是高级不高级的问题,而是复杂不复杂的问题,其实也算不上复杂。。

遍历配置文件的目录(包含子目录,源码论坛忒多了),找到目标文件就放到某数组中,寻找完毕后,把数组中的值显示到GUI(譬如用LISTVIEW)中,供用户选择打开。。无非是各个小功能的堆砌。。
发表于 2009-4-9 14:04:34 | 显示全部楼层
我原来搞过一个模糊搜索指定目录下所有关键字的东西
用到的是
FileFindFirstFile

FileFindNextFile
可以搜索指定目录下面所有关键字的目录并显示出来点哪个打开哪个
发表于 2009-4-9 19:22:15 | 显示全部楼层
高级功能?
AU3搜索目录的速度,会让人喷血.
你这个想法有点那个.EXPLORER 的地址栏,本来就有这个功能,而且速度快.

真想弄的话, 去搜索 下 WIN32_FIND_DATA , 速度上会提升不少.
发表于 2009-7-29 22:10:26 | 显示全部楼层
dddddddddddddddddd
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-27 00:14 , Processed in 0.078648 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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