이 기능은 emeditor에서 가장 자주 써먹는 매크로 입니다.
주로 소스파일을 편집하다가 F5를 누르면 cmd창을 띄우고 sendkey로 해당 컴파일명령을 실행합니다.
sendkey로 보내는 내용은 나중에 나오는 확장shebang이라고 부르는 일종의 주석라인을 이용합니다.
cmd.exe실행하기
cmd창을 띄울 때는, 같은 이름으로 cmd창이 뜨면 제대로된 findwindow를 할 수 없습니다.
그래서 이름을 지정하여 cmd창을 띄웁니다.
코드는 다음과 같습니다.
pid = subprocess.Popen(["cmd.exe", "/c", 'start', 'hello ', 'cmd.exe']).pid
이 코드는 import subprocess를 필요로 합니다.또 Popen은 child process종료를 기다리지 않고 진행합니다.
이에 관한 레퍼런스는 이쪽에서 보실 수 있습니다.
또 findwindow & sendkey입니다만,
이 기능은 wscript, 닷넷, perl등등의 각각의 언어에서 제공하는 win32라이브러리 콜을 사용했는데, 이제는 /* 나이가 들어서인지 각 pc마다 모듈을 설치하기도 좀 귀찮아지고 */ 그냥 성능이 약간 떨어지더라도 간단히 로컬실행파일을 spawn해 sendkeys 하는 것으로 구현합니다.
적당한 툴은 http://orlando.mvps.org/SendKeysMore.asp에서 다운받았습니다.
이 툴은, findwindowbyname과 sendkeys를 동시에 하는데 wscript의 sendkeys가 ascii가 아닌 일본어등을 제대로 send해주지 못했던 부분도, 함께 해결하고 있습니다.
C:\temp\SendKeys.exe 0, 0, "無題 - メモ帳" "Hello!~{PAUSE}After of 1s.~{PAUSE 2}After of 3s.~テスト"
과 같은 코드도 잘 실행되더군요.
아직 가다듬은 코드가 아니고, 실행되는 지, 테스트만 한 것이므로, 코드는 생략하고, 이미지로 대신합니다.
아, call함수는 child process종료를 기다리는 함수입니다. 역시 파이선의 매뉴얼 참조...









