설명
소형 모델 유형 :피망 슬롯
카테고리 : 피망 슬롯 테스트 라이브러리
메인 파일 : mrw02.gms
$title Python의 MessageReceiverWindow.exe 테스트(mrw02,SEQ=823)
$if %system.filesys% == UNIX $abort.noError WinMsg는 Windows에서만 작동합니다.
$onEmbeddedCode 파이썬:
하위 프로세스 가져오기 Popen에서
수입 시간
ctype 가져오기
수입 OS
클래스 _CopyDataStruct(ctypes.Structure):
_fields_ = [('dwData', ctypes.c_char_p),
('cbData', ctypes.c_ulong),
('lpData', ctypes.c_char_p)]
def sendMessage(windowName, 메시지):
cs = _CopyDataStruct()
수신자 = ctypes.windll.user32.FindWindowA(없음, 바이트(windowName, 'utf-8'))
cmd = 바이트(메시지, 'utf-8')
cs.dwData = 1
cs.cbData = len(cmd)+1
cs.lpData = cmd
WM_COPYDATA = 0x4A
ctypes.windll.user32.SendMessageA(수신자, WM_COPYDATA, 0, ctypes.byref(cs))
windowName = 'MRW Python'
p = Popen([os.path.join(r"%피망 슬롯sysdir%.", 'MessageReceiverWindow.exe'), windowName])
# 창이 준비될 때까지 기다립니다
대기 시간 = 120
ReadyFile = 'msg_ready.txt'
os.path.exists(readyFile)가 아닌 동안:
시간.수면(1)
대기 시간 -= 1
sendMessage(windowName, '@SaveAs '+readyFile)
waitTime==0인 경우:
raise Exception('오류: 시간 제한에 도달했습니다')
os.remove(준비파일)
sendMessage(windowName, "이것은 Python에서 보낸 Windows 메시지입니다.")
시간.수면(1)
sendMessage(windowName, "Python의 또 다른 Windows 메시지")
시간.수면(1)
sendMessage(windowName, "@CopyToClipboard")
saveAsFile = 'mrw02.txt'
sendMessage(windowName, "@SaveAs "+saveAsFile)
sendMessage(windowName, "@Terminate")
p.기다려()
그렇지 않은 경우 os.path.exists(saveAsFile):
raise Exception("File '" + saveAsFile + "'가 존재하지 않습니다.")
open(saveAsFile)을 f로 사용:
라인 = f.readlines()
'이것은 Python의 일부 Windows 메시지입니다.'가 라인[0]에 없거나 'Python의 또 다른 Windows 메시지'가 라인[1]에 없는 경우:
raise Exception("'' + saveAsFile + "'의 내용이 예상과 다릅니다.")
os.remove(파일로 저장)
$offEmbeddedCode