본문 바로가기
이미지맥스 그리고 루아(lua)/루아(lua)

[lua] 루아에서 윈도우 앱을 실행하는 방법 os.execute()

by 위치결정 2021. 9. 20.
반응형

루아에서 특정 앱을 실행하려면 os.execute() 함수를 사용합니다.

os.execute('start "" "실행파일경로"')

 

함수의 인수에 'start "" ' 커맨드 코드 이후 실행하려는 윈도우 앱의 경로나 이름을 기입하면 실행이 됩니다.

 

-- 그림판을 실행하는 예시
app_path = '"mspaint"'
os.execute('start "" '..app_path)


-- 메모장을 실행하는 예시
app_path = '"notepad"'
os.execute('start "" '..app_path)


-- 계산기을 실행하는 예시
app_path = '"calc"'
os.execute('start "" '..app_path)

 

윈도우의 기본앱들은 위의 예시처럼 앱의 이름만으로도 실행이 가능합니다.

마치 실행 창에서 프로그램을 켤때와 같죠.

이제 느낌이 오셨나요?

맞습니다.

os.execute('start "" '..실행경로) 는 윈도우의 실행(단축키 : 시작+R) 과 기능이 똑같습니다.

 

그럼 이를 활용해서 블루스택5 앱플레이어를 예시삼아 실행해보고 싶어지네요.

우선 실행하고자 하는 앱플레이어의 바로가기파일을 찾아서 속성창을 열어보면 경로를 알수있습니다.

대상의 경로를 복사해서 붙여보니 다음과 같습니다.

"C:\Program Files\BlueStacks_nxt\HD-Player.exe" --instance Pie64

이를 실행창에 복사해서 실행해보면 원하는 블루스택5의 인스턴스가 실행되는것을 알수있습니다.

 

다만 문제는 루아에서 \ 로만 타이핑한다면 루아에서는 \를 인식하지 못합니다.

\는 제어문자를 입력하는 코드이기 때문에, \\ 로 수정해주어야 \로 처리가 됩니다.

그러므로 \를 모두 \\로 수정합니다.

그리고 루아에서 --는 주석처리하는 문구이므로 instance Pie64가 주석처리 되어버립니다.

이를 피하기 위해 ' ' 작은 따옴표를 사용해 전체를 감싸줄 필요가 있겠네요.

'"C:\\Program Files\\BlueStacks_nxt\\HD-Player.exe" --instance Pie64'

이렇게 말이죠.

 

-- 블루스택5를 실행하는 예시
app_path = '"C:\\Program Files\\BlueStacks_nxt\\HD-Player.exe" --instance Pie64'
os.execute('start "" '..app_path)

이렇게 코드를 작성하여 실행하면 이제 블루스택5 가 실행될것입니다.

 

이를 함수화 하여 앞으로도 간결하게 쓰려한다면 다음과 같이 하시면 좋습니다.

-- 윈도우 앱 실행
function runApp(app_path)
    os.execute('start "" '..app_path)
    print('실행경로 : '..tostring(app_path))
end


app_path = '"C:\\Program Files\\BlueStacks_nxt\\HD-Player.exe" --instance Pie64'
runApp(app_path)

 

이미지맥스와 접목하여 사용한다면 최근 업데이트와 함께 추가된 기능 prescript에 이렇게 원하는 앱을 실행하는 부분을 추가한다면 이미지맥스를 실행함과 동시에 원하는 프로그램을 실행할수 있게 됩니다.

 

윈도우 핸들링을 잘 다루신다면 hwnd 를 체크하여 프로그램이 꺼졌을때를 검출하여 재실행할수도 있고 다양하게 활용이 가능할겁니다.

 

너무 편해 눈물이 납니다.

반응형

댓글