Как корректно найти иконку файла ?
При использовании ф-ии :
она выдает разнообразные форматы
Попытка их коррекции показана здесь :
Скорректировать удается не все.
Есть более корректный способ получения иконки либо коррекции ?
Добавлено:
В частности не удалась моя коррекция ЕХЕ-файлов (не для всех правильная)
Не получил иконку для Htm, Html-файлов файлов-рисунков и др.
При использовании ф-ии :
Код:
_WinAPI_AssocQueryString
Попытка их коррекции показана здесь :
Код:
#include <WindowsConstants.au3>
#include <GUITreeView.au3>
#include <File.au3>
#include <WinAPIEx.au3>
$hGUI = GUICreate("Test", 400, 500)
$hTreeView = GUICtrlCreateTreeView(6, 6, 300, 450, -1, $WS_EX_STATICEDGE+$WS_EX_CLIENTEDGE)
_GUICtrlTreeView_SetBkColor($hTreeView , 0xDBDBDB )
$idDiscItem=GUICtrlCreateTreeViewItem("C:",$hTreeView)
_GUICtrlTreeView_SetIcon($hTreeView,$idDiscItem,"shell32.dll",7)
$Exit_Button = GUICtrlCreateButton("Exit", 330, 470, 60, 20)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3, $Exit_Button
Exit
Case Else
If $nMsg <= 0 Then ContinueLoop
$iItem_CtrlID = GUICtrlRead($hTreeView)
$sFullName=StringReplace(_GUICtrlTreeView_GetTree($hTreeView, $iItem_CtrlID) ,'|','\')
UpDateTV($hTreeView,$iItem_CtrlID)
;If StringInStr ( FileGetAttrib ($sFullName ) , "D") Then ContinueLoop
;ShellExecute($sFullName)
EndSwitch
WEnd
Func UpDateTV($hTV,$idItem)
Dim $aIcon[3]=[2,0,0]
If _GUICtrlTreeView_GetChildren($hTV,$idItem) =False Then
$aFolderList=_FileListToArray( $sFullName,'*',2)
For $i =1 To UBound($aFolderList)-1
$idChild=GUICtrlCreateTreeViewItem ( $aFolderList[$i], $idItem )
_GUICtrlTreeView_SetIcon($hTV,$idChild,"shell32.dll",3)
Next
$aFileList=_FileListToArray( $sFullName,'*',1)
For $i =1 To UBound($aFileList)-1
$idChild=GUICtrlCreateTreeViewItem ( $aFileList[$i], $idItem )
$sExt=StringRegExpReplace($aFileList[$i], '^.*\.', '.')
$sFullName=StringReplace(_GUICtrlTreeView_GetTree($hTV, $idItem) ,'|','\')
$sFull=$sFullName & '\' & $aFileList[$i]
;$sIcon=_WinAPI_AssocQueryString($sFull, $ASSOCSTR_DEFAULTICON); найти иконку,соотв расширению файла
$sIcon=_WinAPI_AssocQueryString($sExt, $ASSOCSTR_DEFAULTICON); найти иконку,соотв расширению файла
ConsoleWrite( @error & @TAB & $sIcon & @LF)
If StringInStr ( $sIcon, ",") Then
$aIcon=StringSplit($sIcon,',','|')
ElseIf StringInStr ( $sIcon, ".") Then
$aIcon[1]=$sIcon
ElseIF $sIcon='%1' Then
$aIcon[1]=$sFull
Else
$aIcon[1]="shell32.dll"
EndIf
_GUICtrlTreeView_SetIcon($hTV,$idChild,$aIcon[1],$aIcon[2])
Next
_GUICtrlTreeView_Expand($hTV, $idItem)
EndIf
EndFunc
Скорректировать удается не все.
Есть более корректный способ получения иконки либо коррекции ?
Добавлено:
Сообщение автоматически объединено:
В частности не удалась моя коррекция ЕХЕ-файлов (не для всех правильная)
Не получил иконку для Htm, Html-файлов файлов-рисунков и др.