jiaosc 发表于 2021-5-28 20:16:44

已解决:如何用64位的系统用64位的Autoit 实现"搜索匹配特定名称的文件或子目录....

本帖最后由 jiaosc 于 2021-5-29 09:41 编辑

64位的系统用32位的Autoit 以下程序可以正常运行,但换用64位的系统用64位的Autoit 运行不了!请教老师:如何用64位的系统用64位的Autoit 实现"搜索匹配特定名称的文件或子目录的名称 "的功能?
#include <Array.au3>
#include <MsgBoxConstants.au3>
#include <WinAPI.au3>
#include <WinAPIDiag.au3>
#include <WinAPIFiles.au3>

Local $aList = []

Local $tData = DllStructCreate($tagWIN32_FIND_DATA)

Local $sFile
Local $hSearch = _WinAPI_FindFirstFile(@ScriptDir & '\*', $tData)
While Not @error
    $sFile = DllStructGetData($tData, 'cFileName')
    Switch $sFile
      Case '.', '..'

      Case Else
            If Not BitAND(DllStructGetData($tData, 'dwFileAttributes'), $FILE_ATTRIBUTE_DIRECTORY) Then
                $aList += 1
                If $aList > UBound($aList) - 1 Then
                  ReDim $aList
                EndIf
                $aList[$aList] = $sFile
                $aList[$aList] = _WinAPI_MakeQWord(DllStructGetData($tData, 'nFileSizeLow'), DllStructGetData($tData, 'nFileSizeHigh'))
            EndIf
    EndSwitch
    _WinAPI_FindNextFile($hSearch, $tData)
WEnd

Switch @extended
    Case 18 ; ERROR_NO_MORE_FILES

    Case Else
      MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), @extended, _WinAPI_GetErrorMessage(@extended))
      Exit
EndSwitch

_WinAPI_FindClose($hSearch)

_ArrayDisplay($aList, '_WinAPI_Find...', $aList)

gyp2000 发表于 2021-5-29 00:07:09

编译64位,尽量使用内置函数实现功能,有一些UDF不支持64位,部分API在64位调用的时候需要使用64位的参数。

fybhwsx 发表于 2021-5-29 07:26:19

https://www.autoitx.com/forum.php?mod=viewthread&tid=31034&highlight=%B2%BB%D3%C3%B5%DD%B9%E9

上面这个不行吗。

jiaosc 发表于 2021-5-29 09:44:27

本帖最后由 jiaosc 于 2021-5-29 09:53 编辑

回复fybhwsx(UID: 7653037)先生:谢谢您的指导!我的64位的Autoit内没有_FileListEx($sDir)函数,但是有_FileListToArray 函数也可以达到所希望的效果。代码如下:
#include <File.au3>
#include <Array.au3>

Local $FileList = _FileListToArray(@ScriptDir)
If @error = 1 Then
      MsgBox(0, "", "No Folders Found.")
      Exit
EndIf
If @error = 4 Then
      MsgBox(0, "", "No Files Found.")
      Exit
EndIf
;_ArrayDisplay($FileList,"$FileList")
Local $y = ".txt"
Local $a
Local $hangshu = $FileList
For $a = $hangshu To 0 Step -1
      Local $txt = $FileList[$a]
      If StringInStr($txt, $y) = 0   Then
                _ArrayDelete($FileList, $a)
      EndIf
Next
_ArrayToClip($FileList, 1)

chzj589 发表于 2021-5-29 14:49:42

jiaosc 发表于 2021-5-29 09:44
回复fybhwsx(UID: 7653037)先生:谢谢您的指导!我的64位的Autoit内没有_FileListEx($sDir)函数,但是有_Fi ...

参加讨论------

#include <Array.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
Example()
Func Example()
        ; 使用默认参数返回 desktop(桌面) 目录所有文件和文件夹清单.
        Local $aFiles = _FileListToArray(@ScriptDir, '*.*', 1, True)
        If @error = 1 Then
                MsgBox($MB_SYSTEMMODAL, "", "路径无效.")
                Exit
        EndIf
        If @error = 4 Then
                MsgBox($MB_SYSTEMMODAL, "", "未发现文件.")
                Exit
        EndIf
        Local $imgfile1, $aPA, $iSL
        $sExt = "jpg|ini|exe|txt|au3|xlsx|xls|rar"
        If Not @error Then
                Dim $aPic, $iSL = 0
                For $ii = 1 To UBound($aFiles) - 1
                        If StringRegExp($aFiles[$ii], '(?i)\.(?:' & $sExt & ")$") Then
                                $aPic[$iSL] = $aFiles[$ii]
                                $iSL += 1
                                ;数组
                                Local $aArray_2D[$iSL]
                                For $i = 0 To UBound($aArray_2D) - 1
                                        $aArray_2D[$i] = $aPic[$i]
                                Next
                        EndIf
                Next
        EndIf
        _ArrayDisplay($aArray_2D, "显示")
EndFunc   ;==>Example


jiaosc 发表于 2021-5-29 16:04:18


试运行报错,何故?

jiaosc 发表于 2021-5-29 16:20:24

Local $aFiles = _FileListToArray(@ScriptDir, '*.*', 1, True) 改为:Local $aFiles = _FileListToArray(@ScriptDir, '*.*', 1 )
$sExt = "jpg|ini|exe|txt|au3|xlsx|xls|rar"改为: Local$sExt = "ini|jpg|ini|exe|txt|au3|xlsx|xls|rar|ini"
运行正常了!OK!

chzj589 发表于 2021-5-29 17:17:51

jiaosc 发表于 2021-5-29 16:04
试运行报错,何故?

是版本的问题。
>运行:D:\AutoIt3\autoit3.exe(3.3.14.2)
页: [1]
查看完整版本: 已解决:如何用64位的系统用64位的Autoit 实现"搜索匹配特定名称的文件或子目录....