2011-01-23 3 views
6

이 포럼에서 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을 테스트했다. 등록/등록 취소 메시지가 기록됩니다. 레지스트리 항목도 아래에 생성됩니다 마이크로 소프트 \ 윈도우 \ CurrentVersion \ Explorer \ ShellIconOverlayIdentifiers \ GD.TestServer 2/HKEY_LOCAL_MACHINE \ 마이크로 소프트 \ 윈도우 \ CurrentVersion \ 쉘 확장 \ SOFTWARE \

1/HKEY_LOCAL_MACHINE \ 소프트웨어 \ 3 승인/직접 클래스 루트 아래에.

또한 getOverlayInfo, GetPriority 및 isMemberOf 메소드 내에 일부 로그를 추가했지만 탐색기를 탐색 할 때 추적을 볼 수 없습니다.

내 구성은 다음과 같습니다 파이썬 2.7 pywin32-214.win32-py2.7.exe 윈도우 XP SP 2

당신은 모든 코드 here 다운로드 할 수 있습니다 해결

+0

실제로 어떤 함수가 호출되는지 확인하기 위해 로그 파일에 항목을 씁니다. 'DllRegisterServer'에 대한 호출은 특히 여기에서 중요합니다. – AndiDog

+1

코드 링크가 끊어졌습니다! – mtasic85

답변

0

문제. 나는 무언가가 심하게 초기화되었지만 지금은 작동한다고 생각한다.

내 희망은 dropBox 서비스와 같은 것을 만드는 것입니다.

업로드 상태에 따라 주어진 파일의 아이콘을 업데이트 할 수 있어야합니다. IID_IShellIconOverlayIdentifier 인터페이스를 구현할 각 상태 (업로드, 업로드, 실패)에 대한 클래스를 만듭니다. 하지만 ...

현재 로컬 파일에 업로드/failed_to_upload 파일 목록을 작성해야 각 파일의 존재 여부를 isMemberOf 메소드로 확인하여 표시 할 좋은 아이콘을 결정해야합니까? 그것을하는 것이 가장 좋은 방법인가요? 예를 들어 레지스트리에있는 키 안에 모든 파일 경로를 저장하는 것이 더 좋을까요?

도움 주셔서 감사합니다.

+0

안녕하세요. 문제를 해결 했습니까? – ManuParra