56 lines
1.3 KiB
Python
56 lines
1.3 KiB
Python
# DDE support for Pythonwin
|
|
#
|
|
# Seems to work fine (in the context that IE4 seems to have broken
|
|
# DDE on _all_ NT4 machines I have tried, but only when a "Command Prompt" window
|
|
# is open. Strange, but true. If you have problems with this, close all Command Prompts!
|
|
|
|
|
|
import win32ui
|
|
import win32api, win32con
|
|
from pywin.mfc import object
|
|
from dde import *
|
|
import sys, traceback
|
|
|
|
class DDESystemTopic(object.Object):
|
|
def __init__(self, app):
|
|
self.app = app
|
|
object.Object.__init__(self, CreateServerSystemTopic())
|
|
def Exec(self, data):
|
|
try:
|
|
# print "Executing", cmd
|
|
self.app.OnDDECommand(data)
|
|
except:
|
|
t,v,tb = sys.exc_info()
|
|
# The DDE Execution failed.
|
|
print("Error executing DDE command.")
|
|
traceback.print_exception(t,v,tb)
|
|
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):
|
|
try:
|
|
win32ui.SetStatusText(msg)
|
|
except win32ui.error:
|
|
pass
|
|
|