我在本論壇中發現了一些關於如何使用Python 2.7 & win32com包實現圖標疊加處理程序的方法,但它不適用於我,我不明白爲什麼。Python中的圖標疊加問題
我創建了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 \微軟\的Windows \ CurrentVersion \外殼擴展\批准 3 /直接在類根下。
我還在方法getOverlayInfo,GetPriority和isMemberOf中添加了一些日誌,但是當我瀏覽資源管理器時無法看到跟蹤信息。
我的配置是: 的Python 2.7 pywin32-214.win32-py2.7.exe 的Windows XP SP 2
您可以下載所有的代碼here:
將條目寫入日誌文件以查看實際調用了哪些函數(如果有的話)。調用`DllRegisterServer`特別感興趣。 – AndiDog 2011-01-23 19:09:41
鏈接到代碼已損壞! – mtasic85 2011-07-13 15:39:40