python wia and RegisterEvent

gelonida gelonida at
Thu Apr 15 17:15:34 EDT 2010


I'd like to register an event in order to be informed, whenever a
Windows WIA device is connected or disconnected.

In python I can use WIA devices, but I don't know how to register

I have existing C# code, which works and looks like.

   class MgrHandlerClass
        public void devManager_OnEvent(string eventID, string
deviceID, string itemID)
        {    } // her emy handler code

        public void addhandler(DeviceManager manager)
            Console.WriteLine("adding handler!");
            manager.OnEvent += new

        static void Main(string[] args)

            MgrHandlerClass mgrhndlr;
            mgrhndlr = new MgrClass();
            DeviceManager manager;

             manager = new DeviceManagerClass();
manager.RegisterEvent(WIA.EventID.wiaEventDeviceConnected, "*");
manager.RegisterEvent(WIA.EventID.wiaEventDeviceDisconnected, "*");
            // wait for callbacks or do other stuff

Now in python I'm stuck

import win32com.client
import wia_defs # created with
manager = win32com.client.Dispatch("WIA.DeviceManager")
mgrhndlr = MgrClass()

class MgrHandlerClass:
    def OnEvent(self, EventID=defaultNamedNotOptArg,
DeviceID=defaultNamedNotOptArg, ItemID=defaultNamedNotOptArg):
        print "Called back with (%s) (%s) (%s)" %

    def addhandler(self,manager):
        # here I'm stuck :-(
        # the following line doesn't work as it seems, that manager
does not have attr
        # onevent
manager.OnEvent.append( WIA._IDeviceManagerEvents_OnEventEventHandler(self.OnEvent) )

The autogenerated file contains:
class IDeviceManager(DispatchBaseClass):
	CLSID = IID('{73856D9A-2720-487A-A584-21D5774E9D0F}')
	coclass_clsid = IID('{E1C5D730-7E97-4D8A-9E42-BBAE87C2059F}')

	def RegisterEvent(self, EventID=defaultNamedNotOptArg,
		"""Registers the specified EventID for the specified DeviceID. If
DeviceID is "*" then OnEvent will be called whenever the event
specified occurs for any device. Otherwise, OnEvent will only be
called if the event specified occurs on the device specified."""
		return self._ApplyTypes_(2, 1, (24, 32), ((8, 1), (8, 49)),
u'RegisterEvent', None,EventID
			, DeviceID)

but I do not know where to place (how to create the function)

Any help would be appreciated.

More information about the Python-list mailing list