2014-09-26 33 views
2

我正在尝试做类似Dropbox文件夹同步的东西,并且遇到了添加覆盖图标的问题。我查了以下指南:制作win32com覆盖图标示例工作

http://timgolden.me.uk/python/win32_how_do_i/add-my-own-icon-overlays.html http://msdn.microsoft.com/en-us/library/bb776858%28VS.85%29.aspx?topic=306117

之后,我把刚TW很小的改动就黄金的例子: 1 IsMemberOf法我想覆盖图标在我的桌面上添加一个文件夹包含一个文件'kala.txt'。 2.在GetOverlayInfo-method中我改变了路径以指向我在下载中的图标。

运行代码后,我检查了注册表,并且键在那里,但图标不显示。 我在一个32位的Windows XP虚拟机上。

代码:

import os 
    from win32com.shell import shell, shellcon 
    import winerror 

    class IconOverlay: 
     _reg_clsid_ = '{642A09BF-DE34-4251-A0C2-588CCE0DB935}' 
     _reg_progid_ = 'TJG.PythonPackagesOverlayHandler' 
     _reg_desc_ = 'Icon Overlay Handler to indicate Python packages' 
     _public_methods_ = ['GetOverlayInfo', 'GetPriority', 'IsMemberOf'] 
     _com_interfaces_ = [shell.IID_IShellIconOverlayIdentifier] 

     def GetOverlayInfo(self): 
      return (r'C:\Users\Administrator\Downloads\netvibes.ico', 0, shellcon.ISIOI_ICONFILE) 

     def GetPriority(self): 
      return 1 

     def IsMemberOf(self, fname, attributes): 
      if os.path.exists(os.path.join(fname, 'kala.txt')): 
       return winerror.S_OK 
      return winerror.E_FAIL 

    if __name__=='__main__': 
     import win32api 
     import win32con 
     import win32com.server.register 
     win32com.server.register.UseCommandLine (IconOverlay) 
     keyname = r'Software\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\PyPackageOverlay' 
     key = win32api.RegCreateKey (win32con.HKEY_LOCAL_MACHINE, keyname) 
     win32api.RegSetValue (key, None, win32con.REG_SZ, IconOverlay._reg_clsid_)` 
+0

你好。我试图让你的解决方案也能工作,但我还没有成功。实际上,注册码并未创建。我应该从python文件创建一个DLL还是只运行命令'python'?谢谢。 – 2015-09-25 08:25:26

回答

0

我解决了这个问题:

之前注册的处理程序,这里有必要删除现有的同名处理程序。这可以通过运行> regedit>浏览到Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ ShellIconOverlayIdentifiers \>删除相同的命名处理程序。

之后,可以添加一个新的处理程序。

要使处理程序正常工作,您必须终止进程explorer.exe并重新启动它。

0

我看不出有任何问题与您的代码,但这里有一些事情要检查:

  1. 看看从例如原来的代码工作(下载例子中使用的图标等);如果不是,你的Windows版本有些不同。
  2. 增加匹配示例的优先级,它使用50并且不清楚该值如何影响特征。
  3. 通过在图标编辑器中打开图标和示例,验证图标是否具有正确的格式。