[python-win32] Implement a com server with a undocument interface

Mark Hammond skippy.hammond at gmail.com
Sat May 9 02:21:59 CEST 2009


I'm afraid you can only implement non-supported interfaces if they are 
described in a type-library - in which case the 'pippo' examples and 
tests should get you started.

Mark

winterTTr wrote:
> I want to use the win32com to implement a shell extension
> with the function to display custom information
> when i move mouse over a txt file in explorer on windows.
> I search for the method to do this and found a com interface
> which i can't find it in the current win32com library.
> It is "IQueryInfo" .
> 
> And my coding is like this ( part of ):
> 
> *****************************************************************
> import pythoncom
> from win32com.shell import shell, shellcon
> import win32gui
> import win32con
> import os
> import winerror
> from win32com.server.exception import COMException
> from pywintypes import IID
> 
> IPersistFile_Methods = "IsDirty Load Save SaveCompleted
> GetCurFile".split()
> 
> IID_IQueryInfo = "{00021500-0000-0000-C000-000000000046}"  # <==
> IQueryInfo_Methods = ["GetInfoFlags","GetInfoTip"]
> 
> class ShellExtension:
>     _reg_progid_ = "ShellExtension.winterTTr"
>     _reg_desc_ = "Shell Extension from winterTTr"
>     _reg_clsid_ = "{EB0D2B97-287A-4B91-A455-D2E021B894AC}"
>     _com_interfaces_ = [
>             pythoncom.IID_IPersistFile,
>             IID(IID_IQueryInfo)]
>     _public_methods_ = IPersistFile_Methods + IQueryInfo_Methods
> 
> # =============== IPersistFile : from ======================
> def GetInfoFlags(self , Flags ):
>     #raise COMException(desc="No Implemented",scode=winerror.E_NOTIMPL)
>     raise COMException(hresult=winerror.E_NOTIMPL)
> 
> def GetInfoTip(self , flags ):
>     print flags
>     print "======== GetInfoTip ==========="
>     return ""
> 
> # =============== IPersistFile : to ======================
> 
> 
> # =============== IPersistFile : from ======================
> def IsDirty( self ):
>     raise COMException(hresult=winerror.E_NOTIMPL)
> 
> def Load(self, filename, mode):
>     #self.filename = filename
>     #self.mode = mode
>     print filename
> 
> 
> def Save( self ,FileName, Remember):
>     raise COMException(hresult=winerror.E_NOTIMPL)
> 
> def SaveCompleted( self , pszFileName):
>     raise COMException(hresult=winerror.E_NOTIMPL)
> 
> def GetCurFile( self ):
>     raise COMException(hresult=winerror.E_NOTIMPL)
> 
> # =============== IPersistFile : to ======================
> 
> *****************************************************************
> 
> and i also modify the register as adding this
> "HKEY_CLASSES_ROOT\\.txt\\{00021500-0000-0000-C000-000000000046}\\{EB0D2B97-287A-4B91-A455-D2E021B894AC}"
> 
> 
> and my question is :
> can i use IQueryInfo IID directly which i can't find it in pywin32com?
> If it could , why i can't see the output from GetInfoTip via win32traceutil.py
> ( OK , i already register the com with --debug mode )
> 
> PS: i can see the out put that Load is invoked , but no "GetInfoTip" output
> 
> any one can give some advice ? Thanks.
> _______________________________________________
> python-win32 mailing list
> python-win32 at python.org
> http://mail.python.org/mailman/listinfo/python-win32



More information about the python-win32 mailing list