$title Test MessageReceiverWindow.exe from Python (mrw02,SEQ=823) $if %system.filesys% == UNIX $abort.noError WinMsg works on Windows only $onEmbeddedCode Python: from subprocess import Popen import time import ctypes import os class _CopyDataStruct(ctypes.Structure): _fields_ = [('dwData', ctypes.c_char_p), ('cbData', ctypes.c_ulong), ('lpData', ctypes.c_char_p)] def sendMessage(windowName, message): cs = _CopyDataStruct() receiver = ctypes.windll.user32.FindWindowA(None, bytes(windowName, 'utf-8')) cmd = bytes(message, 'utf-8') cs.dwData = 1 cs.cbData = len(cmd)+1 cs.lpData = cmd WM_COPYDATA = 0x4A ctypes.windll.user32.SendMessageA(receiver, WM_COPYDATA, 0, ctypes.byref(cs)) windowName = 'MRW Python' p = Popen([os.path.join(r"%gams.sysdir%.", 'MessageReceiverWindow.exe'), windowName]) # wait for the window to be ready waitTime = 120 readyFile = 'msg_ready.txt' while not os.path.exists(readyFile): time.sleep(1) waitTime -= 1 sendMessage(windowName, '@SaveAs '+readyFile) if waitTime==0: raise Exception('Error: Time limit reached') os.remove(readyFile) sendMessage(windowName, "This is some Windows Message from Python") time.sleep(1) sendMessage(windowName, "Another Windows Message from Python") time.sleep(1) sendMessage(windowName, "@CopyToClipboard") saveAsFile = 'mrw02.txt' sendMessage(windowName, "@SaveAs "+saveAsFile) sendMessage(windowName, "@Terminate") p.wait() if not os.path.exists(saveAsFile): raise Exception("File '" + saveAsFile + "' does not exist") with open(saveAsFile) as f: lines = f.readlines() if 'This is some Windows Message from Python' not in lines[0] or 'Another Windows Message from Python' not in lines[1]: raise Exception("Content of '" + saveAsFile + "' is different than expected") os.remove(saveAsFile) $offEmbeddedCode