[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