윈도우 파워쉘 명령어를 활용한 모니터 전원 제어 및 자동화
외부 소프트웨어 없이 윈도우 기능을 활용해야 하는 이유
윈도우 운영체제를 사용하면서 자리를 비울 때나 시스템 자동화 스크립트를 작성할 때, 모니터 전원만을 별도로 제어해야 하는 상황이 발생합니다. 흔히 NirCmd와 같은 외부 유틸리티를 사용하기도 하지만, 보안 정책이 엄격한 환경이거나 시스템에 불필요한 파일을 설치하고 싶지 않은 경우에는 윈도우 내장 도구인 파워쉘(PowerShell)을 활용하는 것이 가장 현명한 선택입니다.
파워쉘은 .NET 프레임워크와 Windows API에 직접 접근할 수 있는 강력한 환경을 제공하므로, 간단한 코드를 통해 하드웨어 제어 명령을 시스템에 하달할 수 있습니다.
Windows API를 통한 모니터 전원 제어 원리
모니터의 전원을 제어하기 위해서는 윈도우의 핵심 동적 링크 라이브러리(DLL) 중 하나인 user32.dll의 SendMessage 함수를 이용해야 합니다. 이 함수는 특정 창이나 시스템 전체에 메시지를 전달하는 역할을 수행합니다.
우리가 사용할 메시지는 WM_SYSCOMMAND이며, 여기에 모니터 전원 상태를 의미하는 SC_MONITORPOWER 매개변수를 조합하여 전달하게 됩니다. 파워쉘에서 이 기능을 사용하려면 C# 코드를 일시적으로 컴파일하여 메모리에 올리는 Add-Type 명령어를 사용합니다.
파워쉘을 이용한 모니터 끄기 실행 코드
아래의 스크립트는 외부 도구 의존성 없이 파워쉘 창에서 즉시 실행 가능한 코드입니다. 이 코드는 시스템에 모니터를 대기 상태로 전환하라는 신호를 보냅니다.
PowerShell
Add-Type -TypeDefinition @’ using System; using System.Runtime.InteropServices; public class MonitorControl { [DllImport(“user32.dll”)] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); public static void TurnOff() { const int WM_SYSCOMMAND = 0x0112; const int SC_MONITORPOWER = 0xF170; const int MONITOR_OFF = 2; SendMessage((IntPtr)0xffff, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF); } } ‘@ [MonitorControl]::TurnOff()
위 스크립트에서 MONITOR_OFF 값으로 설정된 2는 모니터를 완전히 끄는(대기 모드 진입) 역할을 합니다. 만약 다시 켜고 싶다면 명령어를 통해 제어하는 것보다 마우스를 움직이거나 키보드를 입력하는 것이 일반적입니다.
실무 활용을 위한 스크립트 자동화 방법
매번 긴 코드를 파워쉘 창에 복사하여 붙여넣는 것은 효율적이지 않습니다. 이를 간편하게 사용하기 위해 두 가지 방법을 권장합니다.
1. 파워쉘 프로필에 함수 등록
자주 사용하는 환경이라면 파워쉘 프로필($PROFILE) 파일에 위 코드를 함수 형태로 저장하여, 터미널에서 TurnOff-Monitor와 같은 짧은 명령어로 즉시 호출할 수 있습니다.
2. 바탕화면 바로가기 생성
바탕화면에 마우스 오른쪽 버튼을 클릭하여 [새로 만들기] -> [바로가기]를 선택한 후 아래의 명령어를 입력하면, 아이콘 클릭 한 번으로 모니터를 끌 수 있습니다.
PowerShell
powershell.exe -command “Add-Type -TypeDefinition ‘using System; using System.Runtime.InteropServices; public class Monitor { [DllImport(\”user32.dll\”)] public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam); public static void Off() { SendMessage((IntPtr)0xffff, 0x0112, 0xF170, 2); } }’; [Monitor]::Off()”
실행 시 주의사항 및 보안 정책
파워쉘 스크립트 실행이 제한된 환경에서는 오류가 발생할 수 있습니다. 이 경우 파워쉘을 관리자 권한으로 실행한 뒤 Set-ExecutionPolicy RemoteSigned 명령어를 통해 실행 정책을 변경해야 할 수도 있습니다.
또한, 이 명령어는 모니터를 ‘대기 상태’로 만드는 것이므로 실제 하드웨어의 전원 버튼을 누르는 것과는 차이가 있습니다. 시스템은 여전히 구동 중이므로 백그라운드 작업은 중단되지 않으며, 사용자 입력이 감지되면 즉시 화면이 다시 활성화됩니다.
외부 유틸리티에 의존하지 않고 윈도우 표준 API를 활용하는 이 방식은 시스템의 무결성을 유지하면서도 고급 사용자의 전문성을 보여줄 수 있는 가장 효율적인 방법입니다.

답글 남기기