MessageReceiverWindow

소개

MessageReceiver창은 Windows 메시지를 수신하고 표시하는 그래픽 도구입니다. 이 도구는 다음 중 하나와 함께 메가 슬롯할 수 있습니다.put_utility기능 또는 이전에 생성된 인스턴스에 메시지를 보내는 임의의 클라이언트(예: Python 프로그램) 메가 슬롯MessageReceiverWindow.exe.

참고
MessageReceiverWindow는 Windows에서만 메가 슬롯할 수 있습니다.

메가 슬롯법

다음 인스턴스MessageReceiverWindow.exe다음과 같이 시작할 수 있습니다:

MessageReceiverWindow <제목>

선택적 인수제목의 제목을 지정합니다.MessageReceiver창인스턴스. 인수가 생략되면 인스턴스는 기본 제목을 얻습니다.양식1. Windows 메시지 유형WM_COPYDATA22477_22550클립보드에 복사버튼을 메가 슬롯하면 메시지 로그 내용을 클립보드에 복사할 수 있습니다.다른 이름으로 저장...버튼을 메가 슬롯하여 콘텐츠를 파일로 저장할 수 있습니다.

테스트 라이브러리 모델 실행 중 MessageReceiverWindowMRW01.

특수 명령

임의의 텍스트 메시지가 메시지 로그에 표시되는 동안 인스턴스의 특수 동작을 제어하기 위한 특수 명령이 있습니다.MessageReceiver창:

메시지액션
@CopyToClipboard메시지 로그 내용을 클립보드에 복사합니다.
@다른 이름으로 저장 [파일]메시지 로그의 내용을 [파일]에 씁니다
@해지MessageReceiverWindow 실행 파일을 종료합니다.

put_utility 메가 슬롯

put_utility 기능편리한 통합을 제공합니다MessageReceiver창. 예시MRW01이것이 어떻게 작동하는지 보여줍니다. 우선, GAMS 내에서 MessagereceiverWindow 인스턴스를 생성해야 합니다.

$set 제목 Form1
Execute.Async "MessageReceiverWindow.exe %title%";

창문이 준비되자마자 문자 메시지 또는특수 명령다음을 메가 슬롯하여 보낼 수 있습니다put_utility명령으로winMsg:

파일 f;
put_utility f 'WinMsg' / '%title%' / 'GAMS의 일부 Windows 메시지입니다.';

보냄으로써@해지, 인스턴스가 종료될 수 있습니다.

put_utility f 'WinMsg' / '%title%' / '@Terminate';

Python 메가 슬롯

예제MRW0225066_25120MessageReceiver창Python 내에서. 내부에서 Python 프로그래밍 언어를 메가 슬롯하는 동안임베디드 코드섹션, Windows 메시지에 대한 액세스를 제공하는 한 다른 프로그래밍 언어를 메가 슬롯할 수 있습니다.

우선, actypes.구조파생 클래스가 정의되어 Windows 메시지를 a로 보내는 데 메가 슬롯됩니다.MessageReceiverWindow인스턴스:

클래스_CopyDataStruct(ctypes.구조):
_fields_ = [('dw데이터', ctypes.c_char_p),
('cb데이터', ctypes.c_ulong),
('lp데이터', ctypes.c_char_p)]

함수sendMessage()보냄메시지제목이 있는 창으로창이름. 기능을 활용합니다FindWindowA그리고SendMessageAfromctypes.windll.user32:

defsendMessage(windowName, 메시지):
cs = _CopyDataStruct()
수신자 = ctypes.windll.user32.FindWindowA(없음, bytes(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))

포펜에서하위 프로세스모듈은 인스턴스를 시작하기 위해 메가 슬롯됩니다.MessageReceiver창.system_directoryGamsWorkspace 인스턴스의 속성GAMS Python APIGAMS 시스템 디렉토리를 찾는 데 메가 슬롯됩니다:

창이름 ='MRW 파이썬'
p = Popen([os.path.join(GamsWorkspace().system_directory,'MessageReceiverWindow.exe'), 창 이름])

창문이 준비되자마자 문자 메시지 또는특수 명령이전에 정의된 것을 메가 슬롯하여 보낼 수 있습니다sendMessage기능:

sendMessage(windowName,"이것은 Python에서 보낸 Windows 메시지입니다.")

보내는 중@해지실행을 종료합니다MessageReceiver창인스턴스:

sendMessage(windowName,"@해지")