[python-win32] Creating python com objects

Tim Golden mail at timgolden.me.uk
Thu Apr 24 13:11:12 CEST 2008


Alex Denham wrote:
> class PyIDropTarget:
>     _public_methods_ = ['DragEnter', 'DragOver', 'DragLeave', 'Drop']
>     _reg_progid_ = "Python.PyIDropTarget"
>     _reg_clsid_ = '{00000122-0000-0000-C000-000000000046}'
>     def DragEnter(self, args=None):
>         print 'DragEnter: ', args
>     def DragOver(self, args=None):
>         print 'DragOver: ', args
>     def DragLeave(self, args=None):
>         print 'DragLeave: ', args
>     def Drop(self, args=None):
>         print 'Drop: ', args
> 
> Then i just used the com register thing to register it, then i tried 
> dropTarget = win32com.client.Dispatch("Python.PyIDropTarget")
> I didn't know about the pythoncomWrapObject however.

You can't call Dispatch on this object because it's not
implementing IDispatch. I think you'll need something like
this (untested):

<code>
import pythoncom

CLSID = '{89DD545A-2C83-4103-AFE3-6CEB7FF5ECA4}'
# Generated by pythoncom.CreateGuid
PROGID = "Tim.DropTarget"
DESC = "Drop target handler for Tim's app"

class DropTarget:
   _reg_clsid_ = CLSID
   _reg_progid_ = PROGID
   _reg_desc_ = DESC
   _public_methods_ = ['DragEnter', 'DragOver', 'DragLeave', 'Drop']
   _com_interfaces_ = [pythoncom.IID_IDropTarget]

   def DragEnter(self, args=None):
        print 'DragEnter: ', args
   def DragOver(self, args=None):
        print 'DragOver: ', args
   def DragLeave(self, args=None):
        print 'DragLeave: ', args
   def Drop(self, args=None):
        print 'Drop: ', args

drop_target = pythoncom.WrapObject (
   DropTarget, pythoncom.IID_IDropTarget
)

#pythoncom.RegisterDragDrop (hWnd, drop_target)

</code>


More information about the python-win32 mailing list