Описание функции


_WinAPI_SHGetSetFolderCustomSettings

Меняет иконку папки

_WinAPI_SHGetSetFolderCustomSettings(SHFCS, *Path$, flag)

Параметры

SHFCS Структура SHFOLDERCUSTOMSETTINGS
*Path$ Указатель на путь папки
*flag Флаг определяющий доступ чтения/записи, например
#FCS_READ, #FCS_FORCEWRITE, #FCS_WRITE

Возвращаемое значение

Успех:Возвращает 0
Ошибка:Возвращает не 0

Пример

EnableExplicit

#Library = 0
Global SHFCS2

Prototype.i ProtoSHFCS(*SHFCS, *Path, Flags.i = 2)

If OpenLibrary(#Library, "Shell32.dll")
    SHFCS2.ProtoSHFCS = GetFunction(#Library, "SHGetSetFolderCustomSettings")
EndIf

; Проверка указателя на функцию.
If Not SHFCS2
    End
EndIf

Structure SHFOLDERCUSTOMSETTINGS
    dwSize.l
    dwMask.l
    *pvid
    *pszWebViewTemplate
    cchWebViewTemplate.l
    *pszWebViewTemplateVersion
    *pszInfoTip
    cchInfoTip.l
    *pclsid
    dwFlags.l
    *pszIconFile
    cchIconFile.l
    iIconIndex.l
    *pszLogo
    cchLogo.l
EndStructure

#FCS_READ = 1
#FCS_FORCEWRITE = 2
#FCSM_ICONFILE = $10
Global SHFCS.SHFOLDERCUSTOMSETTINGS

Global Path$
Global IcoPath$ = "C:\Windows\System32\Shell32.dll"

Procedure Seticon()
    Protected idxIcon, PathMem$, PathDesktop$, flgINI
    IcoPath$ = OpenFileRequester("Открыть файл ресурсов", IcoPath$, "exe, dll, ico|*.exe;*.dll;*.ico;*.cpl;*.scr;*.ocx;*.ax", 0)
    If Asc(IcoPath$)
        PathMem$ = Space(260)
        PokeS(@PathMem$, IcoPath$)
        If PickIconDlg_(0, @PathMem$, 260, @idxIcon)
            With SHFCS
                \dwSize = SizeOf(SHFOLDERCUSTOMSETTINGS)
                \dwMask = #FCSM_ICONFILE
                \cchIconFile = 0
                \iIconIndex = idxIcon
                \pszIconFile = @PathMem$
            EndWith
            SHFCS2(SHFCS, @Path$, #FCS_FORCEWRITE)
        EndIf
    EndIf
EndProcedure

Path$ = ProgramParameter()
If Not FileSize(Path$) = -2 ; если папка, то
    Path$ = PathRequester("Выберите папку", GetHomeDirectory())
    If Not Asc(Path$)
        End
    EndIf
EndIf

Seticon()