Code: Select all
;-TOP
; Comment : Modul ActiveScript Example GetFileInfo
; Version : v2.14
; Link to ActiveScript : https://www.purebasic.fr/english/viewtopic.php?f=12&t=71399
; Link to SmartTags : https://www.purebasic.fr/english/viewtopic.php?f=12&t=71399#p527089
; Link to VariantHelper : https://www.purebasic.fr/english/viewtopic.php?f=12&t=71399#p527090
; ***************************************************************************************
XIncludeFile "Modul_ActiveScript.pb"
XIncludeFile "Modul_SmartTags.pb"
XIncludeFile "VariantHelper.pb"
UseModule ActiveScript
UseModule ActiveSmartTags
; -------------------------------------------------------------------------------------
Procedure.s GetDataSectionText(*Addr.Character)
Protected result.s, temp.s
While *Addr\c <> #ETX
temp = PeekS(*Addr)
*Addr + StringByteLength(temp) + SizeOf(Character)
result + temp + #LF$
Wend
ProcedureReturn result
EndProcedure
; -------------------------------------------------------------------------------------
Global sFile.s, sDir.s
Global Dim Result.s(0)
Runtime sFile, sDir
; -------------------------------------------------------------------------------------
Procedure LoadScript(vbScript.s)
Protected *Control
*Control = NewActiveScript()
If *Control
;AddNamedObject(*Control, "SmartTags", NewSmartTags())
r1 = ParseScriptText(*Control, vbScript)
EndIf
ProcedureReturn *Control
EndProcedure
Procedure ExecuteScript(*Control, Gadget, StatusBar)
Protected FileName.s, vResult.VARIANT
FileName = OpenFileRequester("Select File", "", "", 0)
If FileName
ClearGadgetItems(Gadget)
StatusBarText(StatusBar, 0, FileName)
sDir = GetPathPart(FileName)
sFile = GetFilePart(FileName)
r1 = ParseScriptText(*Control, ~"GetFileInfo(Runtime.String(\"sDir\"), Runtime.String(\"sFile\"))", #SCRIPTTEXT_ISEXPRESSION, vResult)
If r1 = #S_OK
VariantToStringArray(vResult, Result())
For i = 0 To ArraySize(Result())
AddGadgetItem(Gadget, -1, Result(i))
Next
VariantClear(vResult)
EndIf
EndIf
EndProcedure
; -------------------------------------------------------------------------------------
;-GUI
Procedure UpdateWindow()
Protected dx, dy
dx = WindowWidth(0)
dy = WindowHeight(0) - StatusBarHeight(0) - MenuHeight()
; Resize Gadgets
ResizeGadget(0, 5, 5, dx - 10, dy - 10)
EndProcedure
Procedure Main()
Protected dx, dy
Protected *Control
#WinStyle = #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget
If OpenWindow(0, #PB_Ignore, #PB_Ignore, 600, 400, "VB-Script GetFileInfo", #WinStyle)
; MenuBar
CreateMenu(0, WindowID(0))
MenuTitle("File")
MenuItem(0, "Open")
MenuBar()
MenuItem(99, "Exit")
; StatusBar
CreateStatusBar(0, WindowID(0))
AddStatusBarField(#PB_Ignore)
; Gadgets
dx = WindowWidth(0)
dy = WindowHeight(0) - StatusBarHeight(0) - MenuHeight()
ListIconGadget(0, 5, 5, dx - 10, dy - 10, "Index", 60, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines)
AddGadgetColumn(0, 1, "Name", 200)
AddGadgetColumn(0, 2, "Value", 600)
; Bind Events
BindEvent(#PB_Event_SizeWindow, @UpdateWindow(), 0)
*Control = LoadScript(GetDataSectionText(?vbs))
If Not *Control
MessageRequester("Error", "LoadScript", #PB_MessageRequester_Error)
End
EndIf
; Main Loop
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Select EventWindow()
Case 0
Break
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case 0
ExecuteScript(*Control, 0, 0)
Case 99
Break
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
EndSelect
EndSelect
ForEver
FreeActiveScript(*Control)
EndIf
EndProcedure : Main()
; -------------------------------------------------------------------------------------
DataSection
vbs:
Data.s ~"On Error Resume Next"
Data.s ~"Function GetFileInfo(sDir, sFile)"
Data.s ~" Dim objShell, oFolder, oFile"
Data.s ~" Dim sPropName, sPropValue"
Data.s ~" Dim Result(304)"
Data.s ~" "
Data.s ~" Set objShell = CreateObject(\"Shell.Application\")"
Data.s ~" Set oFolder = objShell.Namespace(sDir)"
Data.s ~" Set oFile = oFolder.ParseName(sFile)"
Data.s ~" ' Different OS versions support different numbers of supported max entries..."
Data.s ~" For i = 0 To 304"
Data.s ~" sPropName = oFolder.GetDetailsOf(Null, i)"
Data.s ~" sPropValue = oFolder.GetDetailsOf(oFile, i)"
Data.s ~" Result(i) = \"\" & i & vbNewLine & sPropName & vbNewLine & sPropValue"
Data.s ~" Next"
Data.s ~" GetFileInfo = Result"
Data.s ~"End Function"
Data.s ~" "
Data.s #ETX$
EndDataSection