Войти

Показать полную графическую версию : [решено] Как в окне программы отобразить иконку которая в данный момент весит на этой папке


assch
01-08-2010, 14:39
Когда открываешь проводник файлы там отображаются со своими иконками
Отображение иконок под конкретный файл проводник берёт наверное из реестра
где прописано что под это расширение ставится определённая иконка
Там же отображаются папки как правило со стандартными иконками (например в виде жёлтых папочек)
Но есть возможность изменить вид этой папки (подставив например для какой нибудь папки свою иконку)
И проводник будет отображать эту папку уже с изменённой (не стандартной) иконкой

Вопрос: Откуда именно проводник берёт информацию для отображения папок
(В данном случае именно той папки у которой изменили стандартный вид)
В реестре?
В кеше иконок?

Это нужно для того чтобы при перетаскивании папки в окно программы
Помимо названия этой папки отобразилась (в окне программы) и её иконка
Ну с названием это понятно а вот как сделать чтобы отобразилась именно та иконка
которая забита на эту папку?

assch
01-08-2010, 16:52
Совет от глобального модератора Yashied сайта Русское сообщество Autoit за которое ему большое спасибо

Global Const $SHGFI_ICONLOCATION = 0x00001000
Global Const $tagSHFILEINFO = 'ptr hIcon;int iIcon;dword Attributes;wchar DisplayName[260];wchar TypeName[80];'

$Path = @FavoritesDir

$tSHFILEINFO = DllStructCreate($tagSHFILEINFO)
_WinAPI_ShellGetFileInfo($Path, $SHGFI_ICONLOCATION, 0, $tSHFILEINFO)
$Icon = DllStructGetData($tSHFILEINFO, 'DisplayName')
$Index = DllStructGetData($tSHFILEINFO, 'iIcon')

GUICreate('MyGUI', 200, 200)
GUICtrlCreateIcon($Icon, -($Index + ($Index > -1)), 10, 10, 128, 128)
GUISetState()

Do
Until GUIGetMsg() = -3


Func _WinAPI_ShellGetFileInfo($sPath, $iFlags, $iAttributes, ByRef $tSHFILEINFO)

Local $Ret = DllCall('shell32.dll', 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', $iAttributes, 'ptr', DllStructGetPtr($tSHFILEINFO), 'uint', DllStructGetSize($tSHFILEINFO), 'uint', $iFlags)

If @error Then
Return SetError(1, 0, 0)
EndIf
Return $Ret[0]
EndFunc




© OSzone.net 2001-2012