/shell-cgcompress-extension

Primary LanguageC++GNU General Public License v3.0GPL-3.0

shell-cgcompress-extension

Provides thumbnails in Windows file explorer for cgCompress files, forked from shell-ora-extension. Windows Vista/7/8/8.1 only.

Installation

To install you need to manually modify your registry. Add the following to register the component:

HKEY_CLASSES_ROOT
 |-- .cgcompress
 |    |-- Key:REG_SZ  (Default) = cgCompressFile
 |    |-- Key:REG_SZ  PerceivedType = Image
 |    |-- ShellEx
 |    |    |-- {E357FCCD-A995-4576-B01F-234630154E96}
 |    |    |    |-- Key:REG_SZ  (Default) = {B5E1208D-3235-44D5-ADD0-478E1A791AE1}
 |
 |-- CLSID
 |    |-- {B5E1208D-3235-44D5-ADD0-478E1A791AE1}
 |    |    |-- Key:REG_SZ  (Default) = cgCompress Property Handler
 |    |    |-- InprocServer32
 |    |    |    |-- Key:REG_SZ  (Default) = <Full path to DLL file>
 |    |    |    |-- Key:REG_SZ  ThreadingModel = Both
 |
 |-- cgCompressFile
 |    |-- Key:REG_SZ  FullDetails = <see Properties>
 |    |-- Key:REG_SZ  PreviewDetails = <see Properties>
 |    |-- Key:REG_SZ  TileInfo = <see Properties>
 
HKEY_LOCAL_MACHINE
 |-- SOFTWARE
 |    |-- Microsoft
 |    |    |-- Windows
 |    |    |    |-- CurrentVersion
 |    |    |    |    |-- Explorer
 |    |    |    |    |    |-- Desktop
 |    |    |    |    |    |    |-- NameSpace
 |    |    |    |    |    |    |    |-- {B5E1208D-3235-44D5-ADD0-478E1A791AE1}
 |    |    |    |    |    |    |    |    |-- Key:REG_SZ  (Default) = cgCompress Property Handler
 |    |    |    |    |    |
 |    |    |    |    |    |-- Shell Extensions
 |    |    |    |    |    |    |-- Approved
 |    |    |    |    |    |    |    |-- Key:REG_SZ  {B5E1208D-3235-44D5-ADD0-478E1A791AE1} = cgCompress Property Handler

{E357FCCD-A995-4576-B01F-234630154E96} is the thumbnailer interface, {B5E1208D-3235-44D5-ADD0-478E1A791AE1} is the actual cgCompress extension.

To enable the component, either restart explorer.exe or run a program which calls the following function:

SHChangeNotify( SHCNE_ASSOCCHANGED, SHCNF_IDLIST, 0, 0 );

Properties

In cgCompressFile which properties/meta-data will be shown in different places. FullDetails is for the Details tab of the Properties dialog box, PreviewDetails is for the Preview pane and TileInfo is when displaying files in the Tiles view.

You specify the wanted properties like this (without the angled brackets):

prop:<property1>;<property2>;<property3>

The following properties are provided with this extension:

System.Image.Dimensions
System.Image.HorizontalSize
System.Image.VerticalSize
System.Image.HorizontalResolution
System.Image.VerticalResolution
Spiller.CgCompress.Pages
Spiller.CgCompress.Animation

The PreviewDetails could look like this:

prop:System.Image.Dimensions;System.Image.HorizontalResolution;System.Image.VerticalResolution

NOTE: Setting FullDetails replaces the default file properties such as Name, Size and Date modified. In order to keep those you need to manually specify them. Here is a list of them all:

System.PropGroup.FileSystem
System.ItemNameDisplay
System.ItemType
System.ItemFolderPathDisplay
System.Size
System.DateCreated
System.DateModified
System.DateAccessed
System.FileAttributes
System.OfflineAvailability
System.OfflineStatus
System.SharedWith
System.FileOwner
System.ComputerName

Notice the System.PropGroup.FileSystem property, which actually acts as a header to group them together. There is also a System.PropGroup.Image for the "Image" header.

Custom properties

The custom properties Spiller.CgCompress.* must be registered in order to use them. The easiest way to do this is to use the prop.exe tool provided here: http://prop.codeplex.com/

You use it to register the cgcompressProperties.propdesc file in the following manner:

prop.exe schema register cgcompressProperties.propdesc

You need to run it with administrative rights and the .propdesc file must most likely need to stay in the folder where it was registered.

Documentation

See the following msdn articles for more details:

Programmatic Identifiers Perceived Types Registering and Distributing Property Handlers Using Property Lists

Building

Dependencies

  • Windows SDK
  • Visual Studio 2012
  • zlib
  • libarchive

Building

Ensure that zlib and libarchive are properly linked. Static linking was used for zlib and dynamic for libarchive, as this is what I got working. Paths are probably specific to my computer, as I have no idea on how to properly set up a VS project.

Make sure to select the same platform as your system, if you are running 64-bit Windows, compile a 64-bit DLL. A 32-bit DLL will not work.