Code : Tout sélectionner
#Include <Array.au3>
$begin = TimerInit()
Local $objProducts, $a
Local $sQueryProducts = "select * from Win32_Service Where name like 'java%' "
Local $objWMIService = ObjGet("winmgmts:\\.\root\CIMV2")
If $objWMIService = 0 Then Exit MsgBox(16, "Erreur", "Impossible de connecter au fournisseur WMI")
Local $colProducts = $objWMIService.ExecQuery($sQueryProducts, "WQL", 0x10 + 0x20)
If IsObj($colProducts) Then
For $objProducts In $colProducts
$a = $objProducts.PathName
If $a <> "" Then Exitloop
Next
EndIf
$path = StringRegExpReplace($a, '"(.+?Java).+', "$1")
$FileList = _RecFileListToArray($path, "java.exe", 1, 1, 1)
Dim $array[UBound($FileList)][2]
$array[0][0] = $FileList[0]
For $i =1 to $FileList[0]
$array[$i][0] = $FileList[$i]
$array[$i][1] = FileGetVersion($FileList[$i])
Next
_ArraySort($array, 1, 1, 0, 1)
MsgBox(0, "", $array[1][1] & @crlf& Timerdiff($begin))
;_ArrayDisplay($array)
;##################################################################
; #FUNCTION# ===========================================
; Name...........: _RecFileListToArray
; Description ...: Lists files and\or folders in a specified path (Similar to using Dir with the /B Switch)
; Syntax.........: _RecFileListToArray($sPath[, $sFilter = "*"[, $iFlag = 0[, $iRecur = 0[, $iFullPath = 0]]]])
; Parameters ....: $sPath - Path to generate filelist for.
; $sFilter - Optional the filter to use, default is *. Search the Autoit3 helpfile for the word "WildCards" For details.
; $iFlag - Optional: specifies whether to return files folders or both
; |$iFlag=0 (Default) Return both files and folders
; |$iFlag=1 Return files only
; |$iFlag=2 Return Folders only
; $iRecur - Optional: specifies whether to search in subfolders
; |$iRecur=0 (Default) Do not search in subfolders
; |$iRecur=1 Search in subfolders
; $iFullPath - Optional: specifies whether to include initial path in result string
; |$iFullPath=0 (Default) Do not include initial path
; |$iFullPath=1 Include initial path
; Return values .: @Error - 1 = Path not found or invalid
; |2 = Invalid $sFilter
; |3 = Invalid $iFlag
; |4 = Invalid $iRecur
; |5 = Invalid $iFullPath
; |6 = No File/Folder Found
; Author ........: SolidSnake <MetalGX91 at GMail dot com>
; Modified.......: 22 Jan 09 by Melba23 - added recursive search and full path options
; Remarks .......: The array returned is one-dimensional and is made up as follows:
; $array[0] = Number of Files\Folders returned
; $array[1] = 1st File\Folder
; $array[2] = 2nd File\Folder
; $array[3] = 3rd File\Folder
; $array[n] = nth File\Folder
; Related .......:
; Link ..........;
; Example .......; Yes
; ==============================================================================
;Special Thanks to Helge and Layer for help with the $iFlag update
; speed optimization by code65536
;===============================================================================
Func _RecFileListToArray($sPath, $sFilter = "*", $iFlag = 0, $iRecur = 0, $iFullPath = 0)
Local $asFileList[1], $sFullPath
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If StringRight($sPath, 1) <> "\" Then $sPath = $sPath & "\"
If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringInStr($sFilter, "|")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
If Not ($iRecur = 0 Or $iRecur = 1) Then Return SetError(4, 4, "")
If $iFullPath = 0 Then
$sFullPath = $sPath
ElseIf $iFullPath = 1 Then
$sFullPath = ""
Else
Return SetError(5, 5, "")
EndIf
_FLTA_Search($sPath, $sFilter, $iFlag, $iRecur, $sFullPath, $asFileList)
If $asFileList[0] = 0 Then Return SetError(6, 6, "")
Return $asFileList
EndFunc ;==>_FileListToArray
; #INTERNAL_USE_ONLY#===========================================================
; Name...........: _FLTA_Search
; Description ...: Searches folder for files and then recursively searches in subfolders
; Syntax.........: _FLTA_Search($sStartFolder, $sFilter, $iFlag, $iRecur, $sFullPath, ByRef $asFileList)
; Parameters ....: $sStartFolder - Value passed on from UBound($avArray)
; $sFilter - As set in _FileListToArray
; $iFlag - As set in _FileListToArray
; $iRecur - As set in _FileListToArray
; $sFullPath - $sPath as set in _FileListToArray
; $asFileList - Array containing found files/folders
; Return values .: None
; Author ........: Melba23 based on code from _FileListToArray by SolidSnake <MetalGX91 at GMail dot com>
; Modified.......:
; Remarks .......: This function is used internally by _FileListToArray.
; Related .......:
; Link ..........;
; Example .......;
; ===============================================================================
Func _FLTA_Search($sStartFolder, $sFilter, $iFlag, $iRecur, $sFullPath, ByRef $asFileList)
Local $hSearch, $sFile
If StringRight($sStartFolder, 1) <> "\" Then $sStartFolder = $sStartFolder & "\"
; First look for filtered files/folders in folder
$hSearch = FileFindFirstFile($sStartFolder & $sFilter)
If $hSearch > 0 Then
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
Switch $iFlag
Case 0; Both files and folders
If $iRecur And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop
Case 1; Files Only
If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop
Case 2; Folders only
If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") = 0 Then ContinueLoop
EndSwitch
If $iFlag = 1 And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") <> 0 Then ContinueLoop
If $iFlag = 2 And StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") = 0 Then ContinueLoop
_FLTA_Add($asFileList, $sFullPath, $sStartFolder, $sFile)
WEnd
FileClose($hSearch)
ReDim $asFileList[$asFileList[0] + 1]
EndIf
If $iRecur = 1 Then
; Now look for subfolders
$hSearch = FileFindFirstFile($sStartFolder & "*.*")
If $hSearch > 0 Then
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sStartFolder & $sFile), "D") And ($sFile <> "." Or $sFile <> "..") Then
; If folders needed, add subfolder to array
If $iFlag <> 1 Then _FLTA_Add($asFileList, $sFullPath, $sStartFolder, $sFile)
; Recursive search of this subfolder
_FLTA_Search($sStartFolder & $sFile, $sFilter, $iFlag, $iRecur, $sFullPath, $asFileList)
EndIf
WEnd
FileClose($hSearch)
EndIf
EndIf
EndFunc
; #INTERNAL_USE_ONLY#========================================================
; Name...........: _FLTA_Add
; Description ...: Searches folder for files and then recursively searches in subfolders
; Syntax.........: _FLTA_Add(ByRef $asFileList, $sFullPath, $sStartFolder, $sFile)
; Parameters ....: $asFileList - Array containing found files/folders
; $sFullPath - $sPath as set in _FileListToArray
; $sStartFolder - Value passed on from UBound($avArray)
; $sFile - Full path of file/folder to add to $asFileList
; Return values .: Function only changes $asFileList ByRef
; Author ........: Melba23 based on code from _FileListToArray by SolidSnake <MetalGX91 at GMail dot com>
; Modified.......:
; Remarks .......: This function is used internally by _FileListToArray.
; Related .......:
; Link ..........;
; Example .......;
; ============================================================================
Func _FLTA_Add(ByRef $asFileList, $sFullPath, $sStartFolder, $sFile)
Local $sAddFolder
$asFileList[0] += 1
If UBound($asFileList) <= $asFileList[0] Then ReDim $asFileList[UBound($asFileList) * 2]
If $sFullPath = "" Then
$sAddFolder = $sStartFolder
Else
$sAddFolder = StringReplace($sStartFolder, $sFullPath, "")
EndIf
$asFileList[$asFileList[0]] = $sAddFolder & $sFile
EndFunc