This is post #post23775
https://www.excelfox.com/forum/showt...age2#post23775
https://www.excelfox.com/forum/showthread.php/2936-YouTube-Video-making-and-editing-etc-coupled-to-excelfox-(-windows-Movie-Maker-)/page2#post23775





More detailed careful analysis of Movie Maker program files.
A couple of short comings made the comparison of versions so far a bit more difficult than need be.
_ Lack of full examination of contents of any **sub folders in the main Movie Maker folder made it more difficult to determine a good ordered positioning in a list of similar versions.
_ As well as physically checking the dates where possible in the computers for the case of files obtained from existing computers with original installs, doing this by coding on the actual computers, rather than gives more reliable properties, in particular the dates.

Some slightly advanced/ intermediate coding.
Recap. Previous coding.

I have already used some coding from this good source, https://www.youtube.com/watch?v=jTmVtPHtiTg . Summarised, the coding there treats things, (I think probably everything, Folders and files), in a folder as Items of that folder. You loop throughjust those items, and so are able to get a lot of properties for each one. Each property is returned from a code line of this general form PropertyValue = objFolder.GetDetailsOf(Fil, 166)
This will then be a "one level" thing – "across the board", a row, line type look. Files in this folder will have their properties analysed, as will any other thing’s such as Folders, (**in this situation those folders within the main folder are often referred to as sub Folders). But we did not look inside those sub folders.

Recap. The basic looping structure would then be of this sort of form
Dim objShell As Shell32.Shell: Set objShell = New Shell32.Shell ' https://i.postimg.cc/fz9zrnnm/tools-referrences-microsoft-shell-controls-and-automation.jpg https://i.postimg.cc/sdc9s54h/tools-...automation.jpg
Dim objFolder As Shell32.Folder: Set objFolder = objShell.Namespace(FullPathToFolder) '
Dim Fil As Shell32.FolderItem

__For Each Fil In objFolder.Items
___PropertyValue = objFolder.GetDetailsOf(Fil, 166)

__Next Fil

So , briefly, Fil is declared as a folder Item, and we loop through each of them in the folder. At each loop we can get a particular property from a number. In that example I have 166, which so far always seems to give me a version number.
To get the full listing of the numbers for the different properties available, see here https://www.youtube.com/watch?v=jTmVtPHtiTg&t=560s
Also notes on the basic coding using the windows Shell object can be see here

So that was the basic coding.
The advanced coding.
The main advancement will be to examine contents of all sub folders. In other words all folders and files at any level or row in the
This comprises two main codings. Sub PassFolderForReocursig1() and Private Sub FileFolderProps(ByVal Pf As String)
The main purpose of this is
_ To produce the first two columns of output. The first is the property names and the second the corresponding property values for the main folder, Movie Maker
_ This folder, ( actually it’s name, Movie Maker ) is then passed to the next macro, Sub PassFolderForReocursig()

Sub PassFolderForReocursig() Brief code description
' 1b
In this macro, you need to hard code the variable Parf to the Folder path of the Folder that contains the main Movie Maker folder.
Typically in the practice this will be either
_ The path to program files if you are checking out the original Movie Maker folder. This will likely be some form similar to something like, C:\Program
or
_ The path to a copy made or downloaded, which is likely in the same as, or close to, the path to where the Excel file containing the macros are.
The first option is preferable, if possible, since the copy my effect properties changing them from the original, and for the comparison purposes we are interested in, the original non changed values are preferable.
' 1c
In the top left cell of where the output starts, ( which will be the active cell at the time of running ) part of the path you gave will be printed out for future reference to give an indication of where the rest of the files and folders that will be listed are/ were at the time of running the macro.

Rem2 Rem 3
The windows shell object way, ( ) is used to get the names and values. For each of the properties we are interested there are two possibilities to get the name of the property for the first column output. I give both, and the first one is 'commented out. This first one is OK if you are sure you know the number to use for that property. The second line is perhaps preferable, as it will be obvious if for some reason the number is not as you expected since you will not get the correct name that you were expecting. ( Microsoft seem to have changed the properties available and the number referring to some of them https://www.youtube.com/watch?v=jTmV...8sZ9zYqog9KZ5B )

So the first program gives us a listing in the first column of the property names that we are interested in, and the second column gives us the values for the Main Movie Maker folder of those properties.
What we want to do now, is go on to look at all folders and files in this main Movie Maker folder, not just the folder and files seen by looking in the first "level down". In other words we want to delve down further to see what is inside any folders ( "sub Folders" ), within the main Movie Maker folder, so Rem 4 , passes the folder path to the Main Movie Maker folder on to the next code, which forms the main new advanced coding being introduced which uses the so called reoccurring routine, or recursion technique do delve down is and where necessary to get at all files and folders



Here is the first macro

Code:
Option Explicit
Dim Clm As Long, Reocopy As Long ' variable for column number to put file or folder details in, number representin the copy of the second macro

' Select the cell where a main folder(s) last bit of its  Parf  will go. This macro will list, starting with the folder name under that patf bit, a few property names. In the naxt column the corresponding property value will be given
'
Sub PassFolderForReocursing()
'Sub SchellFolderDetails2() '  Jan 2024  https://www.excelfox.com/forum/showthread.php/2936-YouTube-Video-making-and-editing-etc-coupled-to-excelfox-(-windows-Movie-Maker-)/page2#post23775
Rem 0
 Let Clm = 0: Reocopy = -1
Rem 1
Dim Ws As Worksheet: Set Ws = Me   '   G:\YouTubeVideos&Anaslysis&HackingTricks\VideoRecordingEditing\Windows (Live) Movie Maker\Movie Maker Versions.xls
' 1b
Dim Parf As String
 Let Parf = ThisWorkbook.Path & "\Versions  Downloads Exes\Verson 2, 2 1 2 5 Downloads 2,1\50 Euro Keks"
 Let Parf = ThisWorkbook.Path & "\50 Euro Keks"
' 1c
    If Len(Parf) - Len(Replace(Parf, "\", "", 1, -1, vbBinaryCompare)) >= 2 Then
     Let ActiveCell = Mid(Parf, InStrRev(Parf, "\", InStrRev(Parf, "\", -1, vbBinaryCompare) - 1, vbBinaryCompare))
    Else
     Let ActiveCell = Parf
    End If
Rem 2  Windows Shell object
Dim objShell As Shell32.Shell: Set objShell = New Shell32.Shell            '    https://i.postimg.cc/Fz9zrnNm/Tools-Referrences-Microsoft-Shell-Controls-And-Automation.jpg     https://i.postimg.cc/sDC9S54h/Tools-Referrences-Microsoft-Shell-Controls-And-Automation.jpg
Dim objFolder As Shell32.Folder: Set objFolder = objShell.Namespace(Parf)  '
Rem 3 Movie Maker Folder Property names and Property values.
Dim Fil As Shell32.FolderItem
    For Each Fil In objFolder.Items  '  We loop through all items to find the Movie Maker folder ' =======
        If Fil.Name = "Movie Maker" Then
        Dim Rw As Long: Let Rw = 1
         'Let ActiveCell.Offset(Rw, 0) = "Name": Let ActiveCell.Offset(Rw, 1) = objFolder.GetDetailsOf(Fil, 0)
         Let ActiveCell.Offset(Rw, 0) = objFolder.GetDetailsOf("Goolies", 0): Let ActiveCell.Offset(Rw, 1) = objFolder.GetDetailsOf(Fil, 0)
         'Let ActiveCell.Offset(Rw + 1, 0) = "Größe": Let ActiveCell.Offset(Rw + 1, 1) = objFolder.GetDetailsOf(Fil, 1)
         Let ActiveCell.Offset(Rw + 1, 0) = objFolder.GetDetailsOf(71, 1): Let ActiveCell.Offset(Rw + 1, 1) = objFolder.GetDetailsOf(Fil, 1)
         'Let ActiveCell.Offset(Rw + 2, 0) = "Elementtyp": Let ActiveCell.Offset(Rw + 2, 1) = objFolder.GetDetailsOf(Fil, 2)
         Let ActiveCell.Offset(Rw + 2, 0) = objFolder.GetDetailsOf(Parf, 2): Let ActiveCell.Offset(Rw + 2, 1) = objFolder.GetDetailsOf(Fil, 2)
         'Let ActiveCell.Offset(Rw + 3, 0) = "Änderungsdatum": Let ActiveCell.Offset(Rw + 3, 1) = Left(objFolder.GetDetailsOf(Fil, 3), InStr(1, objFolder.GetDetailsOf(Fil, 3), " ", vbBinaryCompare))
         Let ActiveCell.Offset(Rw + 3, 0) = objFolder.GetDetailsOf(Ws, 3): Let ActiveCell.Offset(Rw + 3, 1) = Left(objFolder.GetDetailsOf(Fil, 3), InStr(1, objFolder.GetDetailsOf(Fil, 3), " ", vbBinaryCompare))
         'Let ActiveCell.Offset(Rw + 4, 0) = "Erstelldatum": Let ActiveCell.Offset(Rw + 4, 1) = Left(objFolder.GetDetailsOf(Fil, 4), InStr(1, objFolder.GetDetailsOf(Fil, 4), " ", vbBinaryCompare))
         Let ActiveCell.Offset(Rw + 4, 0) = objFolder.GetDetailsOf(Left("gh", 2), 4): Let ActiveCell.Offset(Rw + 4, 1) = Left(objFolder.GetDetailsOf(Fil, 4), InStr(1, objFolder.GetDetailsOf(Fil, 4), " ", vbBinaryCompare))
    '     Let ActiveCell.Offset(Rw + 9, 0) = "Dateiversion": Let ActiveCell.Offset(Rw + 9, 1) = objFolder.GetDetailsOf(Fil, 166)
         Let ActiveCell.Offset(Rw + 5, 0) = objFolder.GetDetailsOf("Bum", 166): Let ActiveCell.Offset(Rw + 5, 1) = objFolder.GetDetailsOf(Fil, 166)
        
         Rem 4
         ActiveCell.Offset(0, 2).Activate
         ' 4b
         Call FileFolderProps(Parf & "\Movie Maker")
         Exit For ' Once we have passed on the full path of the folder,  Movie Maker  , then we are finished with this macro, so we don't need loop further looking fot the Movie Maker folder
        Else
        End If
    Next Fil ' ===========================================================================================
End Sub



The next post considers the main advanced coding of the second macro