123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- # ocxserialtest.py
- #
- # Sample that uses the mscomm OCX to talk to a serial
- # device.
- # Very simple - queries a modem for ATI responses
- import win32ui, win32uiole
- import win32con
- from pywin.mfc import dialog, activex
- from win32com.client import gencache
- import pythoncom
- SERIAL_SETTINGS = '19200,n,8,1'
- SERIAL_PORT = 2
- win32ui.DoWaitCursor(1)
- serialModule = gencache.EnsureModule("{648A5603-2C6E-101B-82B6-000000000014}", 0, 1, 1)
- win32ui.DoWaitCursor(0)
- if serialModule is None:
- raise ImportError("MS COMM Control does not appear to be installed on the PC")
- def MakeDlgTemplate():
- style = win32con.DS_MODALFRAME | win32con.WS_POPUP \
- | win32con.WS_VISIBLE | win32con.WS_CAPTION \
- | win32con.WS_SYSMENU | win32con.DS_SETFONT
- cs = win32con.WS_CHILD | win32con.WS_VISIBLE
- dlg = [ ["Very Basic Terminal",
- (0, 0, 350, 180), style, None, (8, "MS Sans Serif")], ]
- s = win32con.WS_TABSTOP | cs
- dlg.append(["RICHEDIT", None, 132, (5, 5, 340, 170),s | win32con.ES_WANTRETURN | win32con.ES_MULTILINE | win32con.ES_AUTOVSCROLL | win32con.WS_VSCROLL])
- return dlg
- ####################################
- #
- # Serial Control
- #
- class MySerialControl(activex.Control, serialModule.MSComm):
- def __init__(self, parent):
- activex.Control.__init__(self)
- serialModule.MSComm.__init__(self)
- self.parent = parent
- def OnComm(self):
- self.parent.OnComm()
- class TestSerDialog(dialog.Dialog):
- def __init__(self, *args):
- dialog.Dialog.__init__(*(self,)+args)
- self.olectl = None
- def OnComm(self):
- event = self.olectl.CommEvent
- if event == serialModule.OnCommConstants.comEvReceive:
- self.editwindow.ReplaceSel(self.olectl.Input)
- def OnKey(self, key):
- if self.olectl:
- self.olectl.Output = chr(key)
- def OnInitDialog(self):
- rc = dialog.Dialog.OnInitDialog(self)
- self.editwindow = self.GetDlgItem(132)
- self.editwindow.HookAllKeyStrokes(self.OnKey)
- self.olectl = MySerialControl(self)
- try:
- self.olectl.CreateControl("OCX",
- win32con.WS_TABSTOP | win32con.WS_VISIBLE,
- (7,43,500,300), self._obj_, 131)
- except win32ui.error:
- self.MessageBox("The Serial Control could not be created")
- self.olectl = None
- self.EndDialog(win32con.IDCANCEL)
- if self.olectl:
- self.olectl.Settings = SERIAL_SETTINGS
- self.olectl.CommPort = SERIAL_PORT
- self.olectl.RThreshold = 1
- try:
- self.olectl.PortOpen = 1
- except pythoncom.com_error as details:
- print("Could not open the specified serial port - %s" % (details.excepinfo[2]))
- self.EndDialog(win32con.IDCANCEL)
- return rc
- def OnDestroy(self, msg):
- if self.olectl:
- try:
- self.olectl.PortOpen = 0
- except pythoncom.com_error as details:
- print("Error closing port - %s" % (details.excepinfo[2]))
- return dialog.Dialog.OnDestroy(self, msg)
- def test():
- d = TestSerDialog(MakeDlgTemplate() )
- d.DoModal()
- if __name__ == "__main__":
- from . import demoutils
- if demoutils.NeedGoodGUI():
- test()
|