C:\Program Files\Internet Explorer\IEXPLORE.EXE,-17Да кто-нибудь мне все-таки скажет, что у вас записано в
Да кто-нибудь мне все-таки скажет, что у вас записано в
HKEY_CLASSES_ROOT\htmlfile\DefaultIcon
$var = RegRead("HKEY_CLASSES_ROOT\htmlfile\DefaultIcon", "")
MsgBox(4096, "DefaultIcon:", $var)
Вроде нет :blink:Ну ребята, вы что, в первый раз иконки в реестре смотрите?
То же :ConsoleWrite(RegRead('HKCR\' & RegRead('HKCR\.html', '') & '\DefaultIcon', '') & @CR)
Что показывает?
"%1"
$Key = RegRead('HKCR\.html', '')
$CLSID = RegRead('HKCR\' & $Key & '\CLSID', '')
If $CLSID Then
$Icon = RegRead('HKCR\CLSID\' & $CLSID & '\DefaultIcon', '')
Else
$Icon = RegRead('HKCR\' & $Key & '\DefaultIcon', '')
EndIf
ConsoleWrite($Icon & @CR)
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <WinAPI.au3>
$FileFolderFullPath = @DesktopDir & "\AutoIt.html"
GUICreate("Get File/Folder Type & Icon", 300, 150)
$aIconInfo = _FileGetIcon($FileFolderFullPath)
$sIconType = _FileGetType($FileFolderFullPath)
GUICtrlCreateButton("", 130, 50, 36, 36, $BS_ICON)
GUICtrlSetImage(-1, $aIconInfo[1], $aIconInfo[2])
GUICtrlCreateLabel($sIconType, 0, 90, 300, 20, $ES_CENTER)
GUISetState()
While GUIGetMsg() <> -3
WEnd
Func _FileGetType($sFile)
Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
Local $sRegDefault, $sRegType = "", $sExt
If StringInStr(FileGetAttrib($sFile & "\"), "D") Then
$sRegDefault = RegRead("HKCR\Folder", "")
If $sRegDefault <> "" Then
$sRegType = $sRegDefault
EndIf
Else
$sExt = StringRegExpReplace($sFile, '^.*\.(.{0,5})$', '.\1')
If @extended = 0 Or $sExt = $sFile Then
$sExtSaerch = FileFindFirstFile($sFile & ".*")
$sExt = StringRegExpReplace(FileFindNextFile($sExtSaerch), '^.*\.', '.')
$sFile &= $sExt
EndIf
$sRegDefault = RegRead("HKCR\" & $sExt, "")
If $sRegDefault <> "" Then
$sRegType = RegRead("HKCR\" & $sRegDefault, "")
EndIf
If $sRegType = "" Then
$sRegType = $sExt & "-File"
EndIf
EndIf
Opt("ExpandEnvStrings", $iOld_Opt_EES)
Return $sRegType
EndFunc
Func _FileGetIcon($sFile)
Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
Local $sRegDefault = "", $sDefIcon = "", $sExecutable, $sExt, $a_LinkInfo, $hSearch, $sIconFile, $nIcon = 0, $iError = 0, $aRet[3]
If StringInStr(FileGetAttrib($sFile & "\"), "D") Then
$sRegDefault = RegRead("HKCR\Folder", "")
If $sRegDefault <> "" Then
$sDefIcon = RegRead("HKCR\Folder\DefaultIcon", "")
EndIf
Else
$sExt = StringRegExpReplace($sFile, '^.*\.', '.')
If $sExt = ".exe" And FileExists($sFile) Then
Opt("ExpandEnvStrings", $iOld_Opt_EES)
Dim $aRet[3] = [2, $sFile, 0]
Return $aRet
EndIf
If $sExt = ".lnk" Then
$aLinkInfo = FileGetShortcut($sFile)
If Not @error Then
Opt("ExpandEnvStrings", $iOld_Opt_EES)
If Not FileExists($aLinkInfo[4]) Then
$a_LinkInfo = _FileGetIcon($aLinkInfo[0])
If Not @error Then
$aLinkInfo[4] = $a_LinkInfo[1]
$aLinkInfo[5] = $a_LinkInfo[2]
EndIf
EndIf
If $aLinkInfo[5] > 0 Then
$aLinkInfo[5] = BitNOT($aLinkInfo[5])
ElseIf $aLinkInfo[5] < 0 Then
$aLinkInfo[5] = BitNOT($aLinkInfo[5])+1
EndIf
Dim $aRet[3] = [2, $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, "")
EndIf
If $sRegDefault <> "" Then
$sDefIcon = RegRead("HKCR\" & $sRegDefault & "\DefaultIcon", "")
If $sDefIcon = "" Then
$sDefIcon = RegRead("HKCR\" & $sExt & "\DefaultIcon", "")
EndIf
Else
$sRegDefault = RegRead("HKCR\" & $sExt, "PerceivedType")
If $sRegDefault <> "" Then
$sRegDefault = RegRead("HKCR\SystemFileAssociations\" & $sRegDefault & "\DefaultIcon", "")
EndIf
EndIf
EndIf
If $sDefIcon = "" And $sRegDefault <> "" Then
$sDefIcon = RegRead("HKCR\" & $sRegDefault & "\CurVer", "") ; ADOBE PERVERSION....
If $sDefIcon Then
$sDefIcon = RegRead("HKCR\" & $sDefIcon & "\DefaultIcon", "")
Else
$sDefIcon = RegRead("HKCR\" & $sRegDefault & "\shell\open\command", "")
$sDefIcon = StringReplace($sDefIcon, ' "%1"', '')
EndIf
EndIf
If $sDefIcon = "" Then
$sIconFile = "shell32.dll"
ElseIf Not StringRegExp($sDefIcon, '\A"*%1"*\z') 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]
EndIf
Else
$iError = 1
EndIf
EndIf
Else
$sIconFile = $sFile
$nIcon = 0
EndIf
If Not FileExists($sIconFile) And Not FileExists(@SystemDir & "\" & $sIconFile) Then
$sExecutable = _WinAPI_FindExecutable($sFile)
If FileExists($sExecutable) Then
$sIconFile = $sExecutable
EndIf
EndIf
Opt("ExpandEnvStrings", $iOld_Opt_EES)
If $nIcon > 0 Then
$nIcon = BitNOT($nIcon)
ElseIf $nIcon < 0 Then
$nIcon = BitNOT($nIcon)+1
EndIf
Dim $aRet[3] = [2, StringRegExpReplace($sIconFile, '\A"+|"+\z', ''), $nIcon]
Return SetError($iError, 0, $aRet)
EndFunc
Попробуй так:
C:\Program Files\Internet Explorer\iexplore.exe.mui,-17
Определяется "%1"Я лично использую это:
#include <GUIConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
;$FileFolderFullPath = @DesktopDir & "\AutoIt.html"
$FileFolderFullPath = @ScriptDir & "\1.htm"
;$FileFolderFullPath = @ScriptDir & "\1.lnk"
;$FileFolderFullPath = @ScriptDir & "\2.lnk"
;$FileFolderFullPath = @ScriptDir & "\2.au3"
GUICreate("Get File/Folder Type & Icon", 300, 150)
$aIconInfo = _FileGetIcon($FileFolderFullPath)
$sIconType = _FileGetType($FileFolderFullPath)
GUICtrlCreateButton("", 130, 50, 36, 36, $BS_ICON)
GUICtrlSetImage(-1, $aIconInfo[1], $aIconInfo[2])
GUICtrlCreateLabel($sIconType, 0, 90, 300, 20, $ES_CENTER)
GUISetState()
While GUIGetMsg() <> -3
WEnd
Func _FileGetType($sFile)
Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
Local $sRegDefault, $sRegType = "", $sExt
If StringInStr(FileGetAttrib($sFile & "\"), "D") Then
$sRegDefault = RegRead("HKCR\Folder", "")
If $sRegDefault <> "" Then
$sRegType = $sRegDefault
EndIf
Else
$sExt = StringRegExpReplace($sFile, '^.*\.(.{0,5})$', '.\1')
If @extended = 0 Or $sExt = $sFile Then
$sExtSaerch = FileFindFirstFile($sFile & ".*")
$sExt = StringRegExpReplace(FileFindNextFile($sExtSaerch), '^.*\.', '.')
$sFile &= $sExt
EndIf
$sRegDefault = RegRead("HKCR\" & $sExt, "")
If $sRegDefault <> "" Then
$sRegType = RegRead("HKCR\" & $sRegDefault, "")
EndIf
If $sRegType = "" Then
$sRegType = $sExt & "-File"
EndIf
EndIf
Opt("ExpandEnvStrings", $iOld_Opt_EES)
Return $sRegType
EndFunc
Func _FileGetIcon($sFile)
Local $iOld_Opt_EES = Opt("ExpandEnvStrings", 1)
Local $sRegDefault = "", $sDefIcon = "", $sExt, $a_LinkInfo, $hSearch, $sIconFile, $nIcon = 0, $iError = 0, $aRet[3]
If StringInStr(FileGetAttrib($sFile & "\"), "D") Then
$sRegDefault = RegRead("HKCR\Folder", "")
If $sRegDefault <> "" Then
$sDefIcon = RegRead("HKCR\Folder\DefaultIcon", "")
EndIf
Else
$sExt = StringRegExpReplace($sFile, '^.*\.', '.')
If $sExt = ".exe" And FileExists($sFile) Then
Opt("ExpandEnvStrings", $iOld_Opt_EES)
Dim $aRet[3] = [2, $sFile, 0]
Return $aRet
EndIf
If $sExt = ".lnk" Then
$aLinkInfo = FileGetShortcut($sFile)
If Not @error Then
Opt("ExpandEnvStrings", $iOld_Opt_EES)
If Not FileExists($aLinkInfo[4]) Then
$a_LinkInfo = _FileGetIcon($aLinkInfo[0])
If Not @error Then
$aLinkInfo[4] = $a_LinkInfo[1]
$aLinkInfo[5] = $a_LinkInfo[2]
EndIf
EndIf
If $aLinkInfo[5] > 0 Then
$aLinkInfo[5] = BitNOT($aLinkInfo[5])
ElseIf $aLinkInfo[5] < 0 Then
$aLinkInfo[5] = BitNOT($aLinkInfo[5])+1
EndIf
Dim $aRet[3] = [2, $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, "")
EndIf
If $sRegDefault <> "" Then
$sDefIcon = RegRead("HKCR\" & $sRegDefault & "\DefaultIcon", "")
EndIf
EndIf
If $sDefIcon = "" Then
$sIconFile = "shell32.dll"
; ElseIf $sDefIcon <> "%1" Then
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]
EndIf
Else
$iError = 1
EndIf
EndIf
ElseIf $sDefIcon = '"%1"' Then
;ElseIf $sDefIcon = "%1" Then
; $sIconFile = $sFile
; $nIcon = 0
$Key = RegRead('HKCR\' & $sExt, '')
$CLSID = RegRead('HKCR\' & $Key & '\CLSID', '')
If $CLSID Then
$Icon = RegRead('HKCR\CLSID\' & $CLSID & '\DefaultIcon', '')
Else
$Icon = RegRead('HKCR\' & $Key & '\DefaultIcon', '')
EndIf
$aIconInfo=StringSplit($Icon, ",")
$sIconFile =StringRegExpReplace($aIconInfo[1],"\.mui","")
$nIcon =$aIconInfo[2]
ConsoleWrite($Icon)
EndIf
Opt("ExpandEnvStrings", $iOld_Opt_EES)
If $nIcon > 0 Then
$nIcon = BitNOT($nIcon)
ElseIf $nIcon < 0 Then
$nIcon = BitNOT($nIcon)+1
EndIf
Dim $aRet[3] = [2, StringRegExpReplace($sIconFile, '\A"+|"+\z', ''), $nIcon]
Return SetError($iError, 0, $aRet)
EndFunc
На htm-файлеЦитатаГде?Определяется "%1"
У меня она и так работоспособная.
gregaz, _WinAPI_ShellExtractAssociatedIcon() - это системная функция SHGetFileInfo(), и она прекрасно работает (протестировал)
Да вроде только 10 дней как поставил XP SP3,ну и обновил.Если возвращается неверная иконка, то скорее всего, у тебя какие-нибудь неверные записи в реестре, которые появились с недавних пор.
У меня - нет. Но можно на этот случай добавить рег. выражение. Поправил функцию.Но ведь появляется значение с кавычками
У меня - нет. Но можно на этот случай добавить рег. выражение. Поправил функцию.
If $sDefIcon = "" Then
$sIconFile = "shell32.dll"
ElseIf Not StringRegExp($sDefIcon, '\A"*%1"*\z') Then
;.............................
Else
$sIconFile = $sFile ; ведь это сам файл, а не его приложение ???
$nIcon = 0
EndIf
Иконка не отображается на кнопке в моём примере?Теперь у меня на htm-файле выдается имя самого файла
Попробуй заменить $sFile на -1.Разве не надо искать его приложение
Вообще то если уже дело дошло до этого, значит поиск иконки завершился неудачно, и видимо это проблема в настройке типа файла.Разве сам htm-файл даст иконку ?