# DDE support for Boa # Ripped from PythonWin # Note DDE requires PythonWin # Add this code snippet to Boa.py to turn Boa into a dde server ##try: ## import ddeconn ## dde = ddeconn.DDEApp('BoaConstructor', startupModules, ## 'sys.boa_ide.openOrGotoModule(%s)') ## if dde.done: ## print 'Transfered arguments to running Boa, exiting.' ## sys.exit() ##except ImportError: ## pass from pywin.mfc import object from dde import * import traceback import string class DDESystemTopic(object.Object): def __init__(self, app): self.app = app object.Object.__init__(self, CreateServerSystemTopic()) def Exec(self, data): try: self.app.OnDDECommand(data) except: # The DDE Execution failed. print "Error executing DDE command." traceback.print_exc() return 0 class DDEServer(object.Object): def __init__(self, app): self.app = app object.Object.__init__(self, CreateServer()) self.topic = self.item = None def CreateSystemTopic(self): return DDESystemTopic(self.app) def Shutdown(self): self._obj_.Shutdown() self._obj_.Destroy() if self.topic is not None: self.topic.Destroy() self.topic = None if self.item is not None: self.item.Destroy() self.item = None def OnCreate(self): return 1 def Status(self, msg): pass #print 'STATUS', msg class DDEApp: def __init__(self, name, args, execStr): self.args = args self.svrName = name self.done = 0 self.execStr = execStr self.InitDDE() def MakeExistingDDEConnection(self): # Use DDE to connect to an existing instance # Return None if no existing instance conv = CreateConversation(self.ddeServer) try: conv.ConnectTo(self.svrName, "System") return conv except error: return None def InitDDE(self): # Do all the magic DDE handling. self.ddeServer = DDEServer(self) self.ddeServer.Create(self.svrName, CBF_FAIL_SELFCONNECTIONS ) try: # If there is an existing instance, pump the arguments to it dde = self.MakeExistingDDEConnection() if dde is not None and self.args: for arg in self.args: dde.Exec(self.execStr%`arg`) self.done = 1 except: print 'ERROR: There was an error during the DDE conversation.' traceback.print_exc() def OnDDECommand(self, data): import sys exec data