► Afficher le texte
#include <GuiConstantsEx.au3>
#include <ListviewConstants.au3>
#include <Array.au3>
#Include <File.au3>
#include <WindowsConstants.au3>
Global Const $ASSOCSTR_DEFAULTICON = 15
$gui = GUICreate("listview", 547, 591, 192, 125)
$listview1 = GUICtrlCreateListView(" | ", 10, 10, 522, 568, $LVS_NOCOLUMNHEADER, $LVS_EX_CHECKBOXES+ $WS_EX_CLIENTEDGE)
GUICtrlSendMsg($listview1, $LVM_SETCOLUMNWIDTH, 0, 40)
;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 50)
;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 50)
;~ $listview1_0 = GUICtrlCreateListViewItem("|list", $listview1)
;~ $listview1_1 = GUICtrlCreateListViewItem("|file", $listview1)
;~ GUISetState(@SW_SHOW)
$list = _FileListToArray("c:", "*", 2)
$list2 = _FileListToArray("c:", "*", 1)
Dim $items1[$list[0]+$list2[0]]
For $i = 1 To $list[0]
$items1[$i-1] = GUICtrlCreateListViewItem(" |" &$list[$i], $listview1)
;; GUICtrlSetState(-1, $GUI_CHECKED)
GUICtrlSetImage(-1, "shell32.dll", -4)
Next
For $i = $list[0]+1 To $list[0]+$list2[0]
$file = $list2[$i-$list[0]]
$items1[$i-1] = GUICtrlCreateListViewItem(" |" & $file, $listview1)
GUICtrlSetState(-1, $GUI_CHECKED)
$icon = _LocateZeIcon("c:\" & $file)
GUICtrlSetImage(-1, $icon[0], $icon[1])
Next
;_ArrayDisplay($items1)
GUISetState()
While 1
$msg = GUIGetMsg()
Switch $msg
Case -3
Exit
EndSwitch
Wend
;=======================================================
Func _LocateZeIcon($sFile) ; WinAPI_PathParseIconLocation($sFile)
Local $Result[2]
Local $sExt = StringRegExpReplace($sFile, '.+(\..+?)', "$1")
If $sExt = ".exe" Then
$Result[0] = $sFile
$Result[1] = -1
Else
Local $Data = _WinAPI_AssocQueryString($sExt, 15) ;$ASSOCSTR_DEFAULTICON = 15
Local $Ret = DllCall('shlwapi.dll', 'int', 'PathParseIconLocationW', 'wstr', $Data)
If @error Then
Return SetError(1, 0, 0)
EndIf
$Result[0] = $Ret[1]
If StringInStr($Result[0], "shell32.dll") AND $Ret[0]<0 Then
$Result[1] = $Ret[0]+81
ElseIf $Ret[0]<0 Then
$Result[1] = -$Ret[0]
Else
$Result[1] = -$Ret[0]-1
EndIf
EndIf
If $Result[0] = "" Then
$Result[0] = @SystemDir & "\shell32.dll"
$Result[1] = 0
EndIf
Return $Result
EndFunc ;==>_LocateZeIcon
Func _WinAPI_AssocQueryString($sAssoc, $iType, $iFlags = 0, $sExtra = '')
Local $TypeOfExtra = 'wstr'
If Not StringStripWS($sExtra, 3) Then
$TypeOfExtra = 'ptr'
$sExtra = 0
EndIf
Local $Ret = DllCall('shlwapi.dll', 'uint', 'AssocQueryStringW', 'dword', $iFlags, 'dword', $iType, 'wstr', $sAssoc, $TypeOfExtra, $sExtra, 'wstr', '', 'dword*', 4096)
If @error Then
Return SetError(1, 0, '')
Else
If $Ret[0] Then
Return SetError(1, $Ret[0], '')
EndIf
EndIf
Return $Ret[5]
EndFunc ;==>_WinAPI_AssocQueryString