我在这个论坛上发现了一些关于使用Python 2.7和Linux实现图标叠加处理程序的方法和主题。 win32com包,但它对我不起作用,我不明白为什么。
我创建了DLL,注册时没有错误。我也直接尝试过脚本,但它是一样的。这就像从未调用过类。
以下是代码:
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)
嗨,谢谢你的回答。 我已经测试了日志文件和win32traceutil。将记录注册/取消注册消息。注册表项也在以下位置创建:
1 / HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows \ CurrentVersion \ Explorer中\ ShellIconOverlayIdentifiers \ GD.TestServer 2 / HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Shell Extensions \ Approved 3 /直接在类根目录下。
我还在方法getOverlayInfo,GetPriority和isMemberOf中添加了一些日志,但在浏览资源管理器时看不到跟踪。
我的配置是: Python 2.7 pywin32-214.win32-py2.7.exe Windows XP SP 2
您可以下载所有代码here:
答案 0 :(得分:0)
问题解决了。我想有些东西被初始化了,但现在它可以工作了。
我希望制作类似dropBox服务的东西。
我需要能够根据其上传状态更新给定文件的图标。我将为每个状态创建一个类(上传,上传,失败),它将实现IID_IShellIconOverlayIdentifier接口。但是......然后......
我应该在本地文件中编写当前正在上传/ failed_to_upload的文件列表,检查每个文件是否存在于isMemberOf方法中以确定要显示的好图标?这是最好的方法吗,或者最好将所有文件路径存储在注册表中的密钥中?
感谢您的帮助。