所以,感谢Tim Golden guide和其他questions,我有一个脚本,根据类似于Tortoise SVN或Dropbox的“状态”显示文件和文件夹的叠加。
我的问题是,一旦我重新启动explorer.exe进程或操作系统本身并打开资源管理器,就不再有任何覆盖。
我的第一个念头:
这里的问题是注册需要提升权限,这在最终用户初次安装应用程序时是可以接受的,但不是每次重启机器时都是如此。
有人可以建议我在这里失踪吗? 我将类BaseOverlay及其子类放在一个.py文件中,并通过使用子进程调用此脚本从我的主应用程序注册。
subprocess.check_call(script_path, shell=True)
Explorer是否无法重新加载脚本,因为它是Python?我需要编译成DLL或EXE吗?这会改变注册过程吗?
这是注册电话:
win32com.server.register.UseCommandLine(BaseOverlay)
这是课程(简化):
class BaseOverlay:
_reg_clsid_ = '{8D4B1C5D-F8AC-4FDA-961F-A0143CD97C41}'
_reg_progid_ = 'someoverlays'
_reg_desc_ = 'Icon Overlay Handler'
_public_methods_ = ['GetOverlayInfo', 'GetPriority', 'IsMemberOf']
_com_interfaces_ = [shell.IID_IShellIconOverlayIdentifier]
def GetOverlayInfo(self):
return icon_path, 0, shellcon.ISIOI_ICONFILE
def GetPriority(self):
return 50
def IsMemberOf(self, fname, attributes):
return winerror.S_OK