? ExtractFileOrFolderInZipFile(m.ZipFile, m.FileOrFolderToExtract, m.TargetFolder) FUNCTION ExtractFileOrFolderInZipFile(ZipFile AS String, ToExtract AS String, Location AS String, ShellExplorer AS Object, Tree AS String) LOCAL ShellObject && edited IF PCOUNT() < 4 m.ShellExplorer = CREATEOBJECT("Shell.Application") m.Tree = "" ENDIF FOR EACH m.ShellObject IN m.ShellExplorer.NameSpace(m.ZipFile + IIF(EMPTY(m.Tree),"","\" + m.Tree)).items IF UPPER(m.ShellObject.Name) == UPPER(m.ToExtract) m.ShellExplorer.NameSpace(m.Location).CopyHere(m.ShellExplorer.NameSpace(m.ZipFile).items.Item(m.Tree + m.ToExtract)) RETURN .T. ELSE IF m.ShellObject.IsFolder AND ExtractFileOrFolderInZipFile(m.ZipFile,m.ToExtract,m.Location,m.ShellExplorer,m.Tree + m.ShellObject.Name + "\") RETURN .T. ENDIF ENDIF ENDFOR RETURN .F. ENDFUNC