예전에 모니터 끄는 방법을 한글로 검색했더니 아래와 같은 명령어를 바로가기로 추가하라고 안내합니다.
제가 원하는 방법은 잠금 화면으로 진입 후 모니터가 꺼지는 효과와 동일한 효과를 원했죠.
%windir%\System32\scrnsave.scr /s
파일 보면 눈치챘겠지만 화면보호기로 까만 화면(화면 보호기 속성 -> 빈 화면)이 나올 뿐이죠.
그리고 모니터 램프를 보면 실질적으로 모니터가 꺼지지는 않습니다. 원하던 방식은 아닙니다.
그래서 해외에서 실질적으로 모니터를 끄는 스크립트를 검색했더니 역시 실망시키지 않고, 테스트 결과 원하는 대로 동작했습니다.
간단하게 이 한줄을 .bat 파일로 저장하거나
powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
아래 명령어를 바로가기 추가 명령어로 넣으면 됩니다.
%windir%\system32\cmd.exe /c powershell (Add-Type '[DllImport(\"user32.dll\")]^public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);' -Name a -Pas)::SendMessage(-1,0x0112,0xF170,2)
왜 cmd 명령어냐면, 이 명령어가 배치 파일 문법에 맞춰져 있어서 그렇습니다. 고치기는 귀찮군요 ㅎㅎ.
아무튼 위 명령어를 테스트 해보고 마우스가 움직이지만 않는다면, 조금 있다가 모니터가 꺼집니다.
(왠만한 모니터면 신호가 없다거나 대기 모드로 진입한다는 메시지가 뜨겠죠)
그리고 마우스 움직이서나 아무 키를 누르면 다시 켜집니다. 잠금 화면 진입 시 1분 내외로 모니터가 꺼지는 효과와 동일합니다.
스크립트를 보면 악명높은(?) user32.dll 파일이 보일 겁니다. 그렇습니다. 파워 유저나 시스템 개발자라면 알 만한 WINAPI죠.
그래서 bat 스크립트로는 매우 어렵고 고급 시스템 스크립팅이나 개발 방법을 이용해야 합니다.
예를 들면 위처럼 powershell과 .net 의 pinvoke 방식을 쓰거나, 다른 시스템 접근 가능한 개발 방법(C++ 등)을 이용해야죠.
아주 좋네요