반응형

해당 글은 군대에 있을 때 작성한 글을 기반으로 작성되었습니다.


해당 내용은 ActiveXObject를 이용하는 거라 오직 익스플로러에서만 작동합니다.


컴퓨터로 업무를 보는 보직을 가지고 계신 분들은 짬이 찰수록 자신만의 노하우가 담긴 파일을 가지고 계실 겁니다.(혹은 대를 잇거나..) 예를 들어 해야 할 일들이나 자주 사용하는 멘트들을 메모해둔 파일이라든지 데이터를 적어 넣으면 자동으로 계산해주는 한셀 파일 등... 저는 자바스크립트에서 답을 찾아서 활용하고 있습니다. 한글 파일 수정, 멘트 복사, 자주 쓰는 프로그램 실행, 소소한 계산 등등을 자바스크립트를 이용해서 편리하게 하고 있습니다. 말출도 얼마 안 남았고(풀진누입니다 껄껄) 전역 전까지 이런 노하우들을 공유하고자 합니다.

글은 시작과 끝맺음이 참 어려운 것 같습니다. 달랑 코드만 적어놓기 좀 그래서 잡설을 앞에 적었는데 어떻게 끝맺어야 할지..ㅎ

아무튼 원래 제 글 스타일대로 코드로 시작하겠습니다. 자바스크립트를 다룰 줄 안다고 가정하고 진행합니다.


var wsh = new ActiveXObject('WScript.Shell');
wsh.Run('notepad.exe', 1, true);
alert('메모장 실행됨');

해당 자바스크립트 코드를 버튼을 클릭하면 실행되게 만든다던지 적당히 만들어 넣고 테스트를 해보면 짜잔하고 메모장이 실행되실 겁니다.


Run 함수에 대해서 설명하자면 세가지 인수로 이루어져 있습니다.

첫번째 인수는 실행할 파일입니다. 여기서는 메모장이 되겠고요. 전체 경로도 가능하고 경로에 띄어쓰기가 있으면 뒷부분을 매개변수로 인식하니까 큰따옴표로 묶어주는게 좋습니다.

두번째 인수는 실행할 때 여러 옵션을 주는 건데 자세한 건 이글 참고. 제가 아는 건 1과 0 밖에 없거든요. 1은 창보이기, 0은 참 숨기기입니다. 0으로 하고 테스트해보시면 메모장은 보이지 않는데 프로세스 목록에는 뜹니다. 생략가능, 기본값 1

세번째는 프로그램 종료를 기다릴지 여부입니다. 위 코드를 실행하면 메모장이 실행된 후 메모장을 닫으면 '메모장 실행됨'이라는 메시지가 뜰텐데 세번째 인수를 true에서 false로 바꾸면 실행된 프로그램의 종료를 기다리지 않고 메모장이 실행된 뒤 바로 메시지창이 뜨게 됩니다. 생략가능, 기본값 false

제가 예전에 올린 VBS글을 보셨다면 눈치채셨을 수도 있는데 둘다 "WScript.Shell"라는 오브젝트를 사용합니다. 그말인 즉슨 저 코드를 VBS 문법에 맞게 조금만 고쳐주면 바로 VBS에서도 작동하고 반대로 예전 글의 VBS 코드를 자바스크립트 문법에 고쳐주면 동일하게 사용가능합니다.

예시) 예전에 올린 VBS 코드 -> 자바스크립트 코드 변환


var sleep = function (ms) {	// 자바스크립트엔 sleep 함수가 없는듯하여 직접 구현
	for (var start = new Date(); Date.now() - start < ms; ) {}
	return;
};
var wsh = new ActiveXObject('WScript.Shell');
wsh.Run('calc');
sleep(1000);
wsh.SendKeys('1{+}2');
sleep(500);
wsh.SendKeys('*3');
sleep(500);
wsh.SendKeys('{enter}');

하지만 여전히 한글 입력은 안됩니다.ㅠㅜ


추가 정보로 자바스크립트에 기본적으로 alert가 있는 마당에 별 쓸모없지만 Popup 명령어를 통해서 메시지창을 띄울 수 있습니다.


wsh.Popup('메시지!!');

Popup 메소드에 대해서는 이글이 설명이 잘되어 있네요.

반응형

+ Recent posts