11

I have developed a custom property sheet handler that works fine on Windows 7 and Windows 8. On Windows 10, it is not loaded. It appear there were changes in the registration of shell extensions in Windows 10, though I haven't tracked down the specifics.

My property sheet handler reads custom XMP data from jpeg files (.jpe or .jpeg). If I register a new file type (i.e., .photo extension) and register my handler for that, it works as expected:

HKCR\.photo\shellex\PropertySheetHandlers\{my class id}

However, if I register it for the existing jpeg file type (jpegfile), it is not loaded:

HKCR\jpegfile\shellex\PropertySheetHandlers\{my class id}

Again, this issue only occurs on Windows 10. The handler works fine when registered under the HKCR\jpegfile key type on Windows 7 and 8. Anyone aware of what may have changed with Windows 10?

Mike
  • 1,031
  • 14
  • 36

3 Answers3

0

Try registering like below:

HKCR\.jpeg\shellex\PropertySheetHandlers\{my class id}
HKCR\.jpg\shellex\PropertySheetHandlers\{my class id}
James
  • 2,756
  • 17
  • 19
0

HKEY_CLASSES_ROOT seems to be deprecated:

The HKEY_CLASSES_ROOT (HKCR) key contains file name extension associations and COM class registration information such as ProgIDs, CLSIDs, and IIDs. It is primarily intended for compatibility with the registry in 16-bit Windows.

Please move your keys to HKEY_LOCAL_MACHINE\Software\Classes (or HKEY_CURRENT_USER\Software\Classes for the current user).

KompjoeFriek
  • 3,572
  • 1
  • 22
  • 35
  • 3
    HKEY_CLASSES_ROOT is simply a shortcut to HKEY_LOCAL_MACHINE\Software\Classes. Making an entry in one is automatically reflected in the other – Mike Dec 28 '15 at 13:07
  • 1
    It is actually a combined key, representing the values in both `HKEY_LOCAL_MACHINE\Software\Classes` and `HKEY_CURRENT_USER\Software\Classes`. Because this happens transparent to the user, you may not be aware which key you are actually changing: *If you write values to a key under HKEY_CLASSES_ROOT, and the key already exists under HKEY_CURRENT_USER\Software\Classes, the system will store the information there instead of under HKEY_LOCAL_MACHINE\Software\Classes.* – KompjoeFriek Dec 28 '15 at 17:40
  • Thanks for the clarification. Alas, that suggestion did not work (adding the keys under HKEY_CURRENT_USER\Software\Classes rather than HKEY_LOCAL_MACHINE\Software\Classes). – Mike Dec 28 '15 at 20:56
  • 1
    Have you made separate 32bit and 64bit versions of your handler DLL? Windows/File Explorer will load whichever DLL matches its own bitness, so you need a 64bit DLL for 64bit Explorer, and a 32bit DLL for 32bit Explorer. – Remy Lebeau May 19 '16 at 18:59
0

To solve the issue, you have to write an entry in the registry for each file extension you want to handle, for example: HKCR\SystemFileAssociations\.jpeg\shellex\PropertySheetHandlers. Create a subkey with your property sheet handler having his CLISD as default value.

fpiette
  • 11,983
  • 1
  • 24
  • 46