Hello everyone, I am having a problem receiving events from some com objects I am working with. win32com has performed beautifully so far and the code can call methods and manipulate properties with no problems. However I cannot seem to figure out why I am not receiving events. It is probably just a lack of knowledge on my part about com but thats why I am asking. The com object that this code accesses follows a specification for talking to point of sale devices called OPOS. In particular it is a control for a magnetic stripe reader device. I need to receive the DataEvent event from the control. I am using the method prototypes from the makepy utility for the event class but I never see their print statements executed on my output. The DataEvent is being fired though the various card properties are not filled in until the event is generated and those show up every time. Also I have used the ActiveX test shell from vc++ 6 and it receives the events. In the output I have scrubbed the card number and name (its actually a fake test card but it seems safer this way) but the data is there and correct. Thank you for your help in advance.
-Seth Sims -----------event.py------------- import win32com.client as client import pythoncom class OPOSEventSink: def OnDirectIOEvent(self, EventNumber, pData, pString): """method DirectIOEvent""" print "direct io" def OnDataEvent(self, Status): """method DataEvent""" print "data" def OnStatusUpdateEvent(self, Data): """method StatusUpdateEvent""" print "status update" def OnErrorEvent(self, ResultCode, ResultCodeExtended, ErrorLocus, pErrorResponse): """method ErrorEvent""" print "error" if __name__ == '__main__': msr = client.DispatchWithEvents("OPOS.MSR", OPOSEventSink) #Ready the device msr.Open("Ing6XXX") msr.ClaimDevice(-1) #setup the magnetic stripe reader #tell the device to turn its self off when a swipe is read msr.AutoDisable = True msr.DataEventEnabled = True #read all 4 tracks msr.TracksToRead = 0xf #hold events till I tell you to send them msr.FreezeEvents = True #turn the device on msr.DeviceEnabled = True print "please swipe a card" #when this loop finishes there has #been a successful swipe of a card #and a data event is waiting to be #released in the com object while msr.DataCount < 1: pass #by the OPOS specification these #attributes are set as blank strings #until a data event is fired print 'before unfreezing events should be blank' print 'Account number:', msr.AccountNumber, \ '\nName:', msr.Surname, '\n' #release the events msr.FreezeEvents = False print 'events thawed should still be blank' print 'Account number:', msr.AccountNumber, \ '\nName:', msr.Surname, '\n' pythoncom.PumpWaitingMessages() print 'after pump waiting messages now the values should be there' print 'Account number:', msr.AccountNumber, \ '\nName:', msr.Surname, '\n' msr.ReleaseDevice() msr.Close() ---------- Output ------------- please swipe a card before unfreezing events should be blank Account number: Name: events thawed should still be blank Account number: Name: after pump waiting messages now the values should be there Account number: <scrubed by me> Name: <ditto> _______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32