Zoom is a flexible image resizing program with lots of command line arguments. Remembering all those arguments and their exact meaning can be difficult. Common image resizing tasks are to double the size of an image, or resize it to fit dimensions of a 1280x1024 desktop. We can extend the Windows Shell to provide new resize verbs for the kinds of image files that zoom understands. The following commands implement the verbs for common resizing operations.
Verb | Command |
---|---|
Zoom 2x | "C:\Program Files\Zoom\zoom.exe" -filt mitchell -square -src "%1"
-dst "%1-2x.jpg" -d 0 0 6000 6000 -map 2 2 0 0 |
Zoom 1280x1024 | "C:\Program Files\Zoom\zoom.exe" -filt mitchell -square -src "%1"
-dst "%1-1280x1024.jpg" -d 0 0 1280 1024 |
Zoom 1280 | "C:\Program Files\Zoom\zoom.exe" -filt mitchell -square -src "%1"
-dst "%1-1280.jpg" -d 0 0 1280 6000 |
Zoom 1024 | "C:\Program Files\Zoom\zoom.exe" -filt mitchell -square -src "%1"
-dst "%1-1280.jpg" -d 0 0 6000 1024 |
Zoom Blur | "C:\Program Files\Zoom\zoom.exe" -filt mitchell -square -src "%1"
-dst "%1-blur.jpg" -blur 2 |
You can enter this information manually after you
install zoom, assuming you installed it to C:\Program
Files\Zoom
, through the Folder Options / File Types dialog in the
shell. The quotation marks are necessary to quote the spaces in the
paths of the files for proper argument parsing with the shell.
If you run REGEDIT
after adding the verbs with the
folder options dialog you can see that this information
was entered into some registry keys under HKCR\jpegfile
.
You might have been expecting to see the information stored under
HKCR\.jpg
, but Windows uses an extra level of indirection
between the file extension and its file association type. In our
case, this allows a single verb to work on JPEG files stored with
extensions .JPG
, .JPE
, or .JPEG
,
which are all mapped to the file asocation type
jpegfile
.
Great, except there's one problem. The user can install zoom.exe
anywhere on the machine, not just C:\Program Files\Zoom, and may not
have that location in their path. So we can't depend on the above
commands to work if used literally as they appear above. What we need
to do is format the commands when the installation is run so that the
location of zoom.exe
will be resolved to the proper
location for that target machine.
With the Formatted string type in Windows
Installer, you can obtain the installed location of any file by using
the syntax [#
File
key], where File key is the
primary key of a row in the File table.
In our case, we want the location of the zoom.exe
,
which had a generated file key of f0_zoom.exe
.
Substituting [#f0_zoom.exe]
for C:\Program
Files\Zoom\zoom.exe
in the above commands localizes them
properly on the target machine. For example:
"[#f0_zoom.exe]" -filt mitchell -square -src "%1" -dst
"%1-2x.jpg" -d 0 0 6000 6000 -map 2 2 0 0
Note that the quotes ("
) are still part of the command.
The location of zoom still needs to be quoted
for the shell, in case it was installed into a directory containing
spaces, such as Program Files.
Now we just need to write those strings into the registry, which we do with the Registry table. You might think that we want to use the Verb and Extension tables for this, but in this case we don't. Zoom isn't acting as the COM server for the JPEG file type, it is only adding some command-line shorthands to the shell's context menu for JPEG files.
Open the installation database and display the Registry table.
Add the following new rows for the shell commands and verbs listed above. The data for the Value column of each row is the appropriate shell command listed above.
Registry | Root | Key | Name | Component_ |
---|---|---|---|---|
rvJPEGDouble |
0 |
jpegfile\shell\Zoom 2x\command |
NULL | Executable |
rvJPEG1280x1024 |
0 |
jpegfile\shell\Zoom 1280x1024\command |
NULL | Executable |
rvJPEG1280 |
0 |
jpegfile\shell\Zoom 1280\command |
NULL | Executable |
rvJPEG1024 |
0 |
jpegfile\shell\Zoom 1024\command |
NULL | Executable |
rvJPEGBlur |
0 |
jpegfile\shell\Zoom Blur\command |
NULL | Executable |
Validate the database to check for any errors made during editing and save your changes.
Now when you install Zoom, the context menu (and File menu, in Windows Folder views) will display the items "Zoom 2x", "Zoom 1280x1024", "Zoom 1280", "Zoom 1024", and "Zoom Blur". Selecting one of these will perform the operation on the selected file and produce a new file containing the result in the same directory. The output files are created from the input filenames with a suffix added.
You can add verbs to use zoom as an image conversion program,
although this is not its primary purpose, by giving the source and
destination filenames different extensions, such as zoom -src "%1"
-dst "%1.jpg"
will convert a file to JPEG format. You can also
add verbs for the other file types supported by zoom. zoom -dev
?
provides a list of understood formats.