On 16/04/2010 7:15 AM, gelonida wrote:
Hi,
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
events
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
WIA._IDeviceManagerEvents_OnEventEventHandler(
devManager_OnEvent);
}
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, "*");
mgrhndlr.addhandler(manager);
// wait for callbacks or do other stuff
}
Now in python I'm stuck
import win32com.client
import wia_defs # created with makepy.py
manager = win32com.client.Dispatch("WIA.DeviceManager")
mgrhndlr = MgrClass()
manager.RegisterEvent(EventID=constants.wiaEventDeviceConnected,DeviceID=u'*')
manager.RegisterEvent(EventID=constants.wiaEventDeviceDisconnected,DeviceID=u'*')
mgrhndlr.addhandler(manager)
class MgrHandlerClass:
def OnEvent(self, EventID=defaultNamedNotOptArg,
DeviceID=defaultNamedNotOptArg, ItemID=defaultNamedNotOptArg):
print "Called back with (%s) (%s) (%s)" %
(EventID,DeviceID,ItemID)
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 model used by pywin32 is more "low level" than that exposed by some
of the MS languages. You probably need something closer to:
class MgrHandlerClass:
def OnEvent(self, EventID=defaultNamedNotOptArg, ...):
print "Called back with ..."
manager = win32com.client.DispatchWithEvents("WIA.DeviceManager",
MgrHandlerClass)
manager.RegisterEvent(EventID=constants.wiaEventDeviceConnected,DeviceID=u'*')
manager.RegisterEvent(EventID=constants.wiaEventDeviceDisconnected,DeviceID=u'*')
And magically your OnEvent should be called when the event happens.
Googling for 'DispatchWithEvents' might find some good hits for more
information.
HTH,
Mark
--
http://mail.python.org/mailman/listinfo/python-list