[python-win32] newby to com and a problem with events
Seth Sims
ssims at spsu.edu
Fri Oct 5 17:32:14 CEST 2007
Hi,
Does anyone have anything else I can try to fix my problem? I know that events are being fired because of their side effects on the COM object state. However I never see my little print messages from the event handler. I feel like it is just something small that I am missing. Thank you in advance.
-Seth
------msrtest.py-------
from win32com import client
import pythoncom
import time
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
status = msr.Open("Ing6XXX")
if status <> 0:
print "failed to open msr"
quit()
status = msr.ClaimDevice(-1)
if status <> 0:
print "failed to claim msr"
quit()
#setup the magnetic stripe reader
msr.AutoDisable = True #tell the device to turn its self off when a swipe is read
msr.DataEventEnabled = True
msr.TracksToRead = 0xf #read all 4 tracks
msr.FreezeEvents = True #hold events till I say to send them
#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:
time.sleep(0.5)
#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'
timeout = time.time() + 30
while time.time() <= timeout:
print 'pumping messages'
pythoncom.PumpWaitingMessages()
time.sleep(0.5)
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: <card number>
Name: <name>
pumping messages
pumping messages
pumping messages
....
More information about the python-win32
mailing list