I found some examples and topics on this forum on how to implement the icon mapping handler using Python 2.7 and the win32com package, but it does not work for me, and I donβt understand why.
I am creating a DLL and I have no error registering. I also tried directly with the script, but this is the same. He, as a class, is never called.
Here is the code:
import win32traceutil from win32com.shell import shell, shellcon import pythoncom import winerror import os REG_PATH =r'Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers' REG_KEY = "GdIconOverlayTest" class GdClass: _reg_clsid_='{512AE200-F075-41E6-97DD-48ECA4311F2E}' _reg_progid_='GD.TestServer' _reg_desc_='gd desc' _public_methods_ = ['GetOverlayInfo','GetPriority','IsMemberOf'] _com_interfaces_=[shell.IID_IShellIconOverlayIdentifier, pythoncom.IID_IDispatch] def __init__(self): pass def GetOverlayInfo(self): return (os.path.abspath(r'C:\icons\test.ico'), 0, shellcon.ISIOI_ICONFILE) def GetPriority(self): return 0 def IsMemberOf(self, fname, attributes): print('ismemberOf', fname, os.path.basename(fname)) if os.path.basename(fname) == "hello.text": return winerror.S_OK return winerror.E_FAIL def DllRegisterServer(): print "Registering %s" % REG_KEY import _winreg key = _winreg.CreateKey(_winreg.HKEY_LOCAL_MACHINE, REG_PATH) subkey = _winreg.CreateKey(key, GdClass._reg_progid_) _winreg.SetValueEx(subkey, None, 0, _winreg.REG_SZ, GdClass._reg_clsid_) print "Registration complete: %s" % GdClass._reg_desc_ def DllUnregisterServer(): print "Unregistering %s" % REG_KEY import _winreg try: key = _winreg.DeleteKey(_winreg.HKEY_LOCAL_MACHINE, r"%s\%s" % (REG_PATH, GdClass._reg_progid_)) except WindowsError, details: import errno if details.errno != errno.ENOENT: raise print "Unregistration complete: %s" % GdClass._reg_desc_ if __name__=='__main__': from win32com.server import register register.UseCommandLine(GdClass, finalize_register = DllRegisterServer, finalize_unregister = DllUnregisterServer)
Hi and thanks for your reply. I tested the log file as well as win32traceutil. Registration / non-registration messages are logged. Registry entries are also created under:
1 / HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ ShellIconOverlayIdentifiers \ GD.TestServer 2 / HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Shell Extensions \ Approved 3 / directly under the root class.
I also added a few logs inside the getOverlayInfo, GetPriority and isMemberOf methods, but when viewing the explorer, I don't see the trace.
My configuration: Python 2.7 pywin32-214.win32-py2.7.exe Windows XP SP 2
You can download all the code here :
python windows shell com py2exe
dougi
source share