Ujjaval Suthar wrote:
Hi all,

I have a COM control which fires a status event called ProcessingDataAvailable(). The COM control has a method call AddData() with some data parameters.

Using python, in a simple program, I can instantiate COM object via Dispatch and call AddData() method successfully.

Now, I want to have a thread which keeps running and listening for ProcessingDataAvailable() event and do some processing in my program.

Can somebody please give me a simple example code that shows how it can be done? I'm very new to this kind of programming.


Well here's a crude example to get you going. It uses the
MSAgent thingy which I imagine is installed (if little used)
on most Windows machines. Notice that it's launching a thread
to pick up events from a Queue -- the standard Python structure
for communicating between threads.

<code>
import win32com.client
import pythoncom
import Queue
import threading
import time

events = Queue.Queue ()

def do_things_with_events (events):
 while True:
   event = events.get ()
   open ("c:/temp/events.log", "a").write (str (event) + "\n")

class AgentEvents:
 def OnHide (self, character_id, cause):
   events.put (("hide", character_id, cause))

#
# Agent.Control.1 - Win2K characters
# Agent.Control.2 - Office2K characters
#
agent = win32com.client.DispatchWithEvents ("Agent.Control.2", AgentEvents)
agent.Connected = True

def start (name, filename=None, show_immediately=True):
 filename = filename or ("%s.acs" % name)
 agent.Characters.Load (name, filename)
 this_agent = agent.Characters (name)
 this_agent.Show ()

if __name__ == '__main__':
 import time
 threading.Thread (target=do_things_with_events, args=(events,)).start ()
 start ("merlin")
 while True:
   pythoncom.PumpWaitingMessages ()
   time.sleep (0.1)

</code>

_______________________________________________
python-win32 mailing list
[email protected]
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to