ZIPping with Windows Shell

... here in Dyalog APL syntax

Suddenly I came in need of zipping files. And what more obvious solution than to use the zip-facilities already present in Windows? In essence it can be accomplished in a 3 (+1 if you don't already have a zip file) step process as follows.

If need be first create an empty zip file, basically a file with these 22 byte values: 80 75 5 6 0 ... 0:

Once the zip file is present, create an instance of the Shell COM...

... get a handle to the files, here a folder and the zip archive, calling the NameSpace method...

... and finally have all files in that folder copied to the ZIP archive,

where 4 means "don't display a progress dialog box", and 16 "respond with 'Yes to All' for any dialog box that is displayed".

Note that FILES can be a FolderItems object (as here), a FolderItem object (result from the Item method), or a string that represents a file name.