gregaz
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору ViSiToR , Спасибо Просьба посмотреть на Тестовом скрипте (правда и скорость обработки осталась такая же) При попытке внести в ImageList иконку файла с расширениями : $ext='exe' or $ext='htm' or $ext='html' or $ext='wjr' or $ext='js' и возможно еще какими -то выдается системное Error : _GUIImageList_AddIcon : -1 и скрипт выгружается ? Такое впечатление, что система ругается на то,что разным файлам присвоена одна иконка или наоборот одинаковым файлам -разные ? Код: #include <File.au3> #include <Array.au3> #include <GuiImageList.au3> $gui= GuiCreate("Test",600, 500) $hListView = _GUICtrlListView_Create ($gui, "",15,10,480,472,BitOR($LVS_REPORT,$LVS_SHOWSELALWAYS)) ;Назначение иконок $hImage = _GUIImageList_Create (16,16,5); 5-ФОН ОКНА _GUIImageList_AddIcon ($hImage, "shell32.dll", 0) _GUICtrlListView_SetImageList ($hListView, $hImage, 1) ; Создание колонок в ListView _GUICtrlListView_InsertColumn ($hListView, 0, "Имя", 220) _GUICtrlListView_InsertColumn ($hListView, 1, "Тип", 70) $folder=@ProgramFilesDir&'\'&'Download Master' ;$folder=@ProgramFilesDir&'\'&'AutoIt3\Include' $FileList=_FileListToArray($folder,"*",0) $indImageList=0 For $i=1 To UBound($FileList)-1 $indImageList = $indImageList+1 _GUICtrlListView_AddItem ($hListView, $FileList[$i]) $arIcon=_FileGetIcon($folder&'\'&$FileList[$i]) MsgBox(0,'$FileList[$i] = '&$FileList[$i],$arIcon[1]&@CRLF& $arIcon[2]) _GUIImageList_AddIcon ($hImage, $arIcon[1], $arIcon[2]) _GUICtrlListView_SetItemImage ($hListView,$i-1, $indImageList) Next GUISetState () While 1 $msg = GUIGetMsg() Switch $msg Case -3 Exit EndSwitch WEnd Func _FileGetIcon($sFile) Local $sRegDefault = "", $sDefIcon = "", $sExt, $hSearch, $sIconFile, $nIcon=0 Local $aRet[3], $iError = 0 If _IsFolder($sFile) Then $sRegDefault = RegRead("HKCR\Folder", "") If $sRegDefault <> "" Then $sDefIcon = RegRead("HKCR\Folder\DefaultIcon", "") Else $sExt = StringRegExpReplace($sFile, '^.*\.', '.') If $sExt = ".lnk" Then Local $aLinkInfo = FileGetShortcut($sFile) If Not @error Then Dim $aRet[3] = [2, _Expand_Environments($aLinkInfo[4]), $aLinkInfo[5]] Return $aRet EndIf EndIf If $sExt = $sFile Then $hSearch = FileFindFirstFile($sFile & ".*") $sExt = StringRegExpReplace(FileFindNextFile($hSearch), '^.*\.', '.') $sFile &= $sExt FileClose($hSearch) EndIf $sRegDefault = RegRead("HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\" & $sExt, "ProgID") If $sRegDefault = "" Then $sRegDefault = RegRead("HKCR\" & $sExt, "") If $sRegDefault <> "" Then $sDefIcon = RegRead("HKCR\" & $sRegDefault & "\DefaultIcon", "") EndIf If $sDefIcon = "" Then $sIconFile = "shell32.dll" ElseIf $sDefIcon <> "%1" Then If StringRegExpReplace($sFile, "^.*\\", "") = "shell32.dll" Then $sIconFile = $sFile $nIcon = 0 Else Local $aDefIconSplit = StringSplit($sDefIcon, ",") If IsArray($aDefIconSplit) Then $sIconFile = $aDefIconSplit[1] If $aDefIconSplit[0] > 1 Then $nIcon = $aDefIconSplit[2] Else $iError = 1 EndIf EndIf ElseIf $sDefIcon = "%1" Then $sIconFile = $sFile $nIcon = 0 EndIf Dim $aRet[3] = [2, _Expand_Environments($sIconFile), $nIcon] Return SetError($iError, 0, $aRet) EndFunc Func _Expand_Environments($sString) $sString = StringReplace($sString, "%windir%", @WindowsDir) $sString = StringRegExpReplace($sString, "%HomeDrive%|%SystemDrive%", @HomeDrive) $sString = StringReplace($sString, "%HomePath%", @HomePath) $sString = StringReplace($sString, "%Temp%", @TempDir) $sString = StringReplace($sString, "%ProgramFiles%", @ProgramFilesDir) $sString = StringReplace($sString, "%UserProfile%", @UserProfileDir) $sString = StringReplace($sString, "%AppData%", @AppDataDir) $sString = StringReplace($sString, "%ComSpec%", @ComSpec) Return $sString EndFunc Func _IsFolder($name) Return StringInStr(FileGetAttrib($name), "D") EndFunc |
| Всего записей: 79 | Зарегистр. 02-06-2007 | Отправлено: 17:21 12-04-2008 | Исправлено: gregaz, 17:24 12-04-2008 |
|