mrw02.gms : Python에서 MessageReceiverWindow.exe 테스트

설명



소형 모델 유형 :슬롯 사이트


카테고리 : 슬롯 사이트 테스트 라이브러리


메인 파일 : 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