Что нового

Как выяснить какая иконка у папки?

saraconor

Новичок
Сообщения
404
Репутация
3
допустим:
Код:
$dir = "C:\ATI\Support")

как выяснить номер иконки папки Support?
(иконки стандартные)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
saraconor,
А что Вы с ней (с иконкой) собираетесь дальше делать?
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
saraconor
Поищите в папке скрытый файл desktop.ini - в нём может быть индекс иконки.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
saraconor

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

$Path = 'D:\Documents' ; путь до папки

$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
 
Автор
S

saraconor

Новичок
Сообщения
404
Репутация
3
помогите пожалуйста уменьшить скрипт, можно его без функции сделать?
Код:
#include <Array.au3>
Global Const $SHGFI_ICONLOCATION = 0x00001000
Global Const $tagSHFILEINFO = 'ptr hIcon;int iIcon;dword Attributes;wchar DisplayName[260];wchar TypeName[80];'
$Path = 'D:\Documents' ; путь до папки
$tSHFILEINFO = DllStructCreate($tagSHFILEINFO)
_WinAPI_ShellGetFileInfo($Path, $SHGFI_ICONLOCATION, 0, $tSHFILEINFO)
$Index = DllStructGetData($tSHFILEINFO, 'iIcon')
msgbox(0,'',$Index)
exit
Func _WinAPI_ShellGetFileInfo($sPath, $iFlags, $iAttributes, ByRef $tSHFILEINFO)
DllCall('shell32.dll', 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', $iAttributes, 'ptr', DllStructGetPtr($tSHFILEINFO), 'uint', DllStructGetSize($tSHFILEINFO), 'uint', $iFlags)
Return
EndFunc
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
saraconor
Можно так (но скрипт станет гораздо больше в килобайтах):

Код:
#include <WinAPIEx.au3>
#include <APIConstants.au3>

$Path = 'D:\Documents'

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

MsgBox(0,'',$Index)
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
saraconor [?]
Код:
$sPath = "C:\Program Files\Skype" ; путь до папки
$tSHFILEINFO = DllStructCreate('ptr hIcon;int iIcon;dword Attributes;wchar DisplayName[260];wchar TypeName[80];')
DllCall('shell32.dll', 'dword_ptr', 'SHGetFileInfoW', 'wstr', $sPath, 'dword', 0, 'ptr', DllStructGetPtr($tSHFILEINFO), 'uint', DllStructGetSize($tSHFILEINFO), 'uint', 0x00001000)
$Index = DllStructGetData($tSHFILEINFO, 'iIcon')
msgbox(0,'',$Index)
 
Верх