#Include <APIConstants.au3>
#Include <Array.au3>
#Include <WinAPIEx.au3>
Global Const $PID = ProcessExists('explorer.exe')
If _WinAPI_GetVersion() < '6.0' Then
MsgBox(16, 'Error', 'Require Windows Vista or later.')
Exit
EndIf
Dim $List[101] = [0]
$Data = _WinAPI_EnumProcessHandles($PID)
If IsArray($Data) Then
$hTarget = _WinAPI_GetCurrentProcess()
$hSource = _WinAPI_OpenProcess($PROCESS_DUP_HANDLE, 0, $PID)
If $hSource Then
For $i = 1 To $Data[0][0]
Switch $Data[$i][1]
Case 28
Switch $Data[$i][2]
Case 0x00100000, 0x00120189, 0x0012019F
ContinueLoop
Case Else
$hObject = _WinAPI_DuplicateHandle($hSource, $Data[$i][0], $hTarget)
If Not @error Then
$File = _WinAPI_GetFinalPathNameByHandleEx($hObject)
If Not @error Then
$List[0] += 1
If $List[0] > UBound($List) - 1 Then
ReDim $List[$List[0] + 100]
EndIf
$List[$List[0]] = StringTrimLeft($File, 4)
EndIf
_WinAPI_CloseHandle($hObject)
EndIf
EndSwitch
Case Else
EndSwitch
Next
ReDim $List[$List[0] + 1]
EndIf
EndIf
If $List[0] Then
_ArrayDisplay($List)
EndIf