C# - Win32 API를 이용한 모니터 전원 끄기
재미있는 글이 떴군요. ^^
Turn off monitors when locking the computer
; https://www.meziantou.net/turn-off-monitors-when-locking-the-computer.htm
; https://forum.dotnetdev.kr/t/topic/8212#grald-barr-10
사실, Win32 API에서 하드웨어를 제어하는 것은 흔치 않습니다.
Safely remove a USB drive using the Win32 API?
; https://stackoverflow.com/questions/85649/safely-remove-a-usb-drive-using-the-win32-api
안전하게 eject시킨 USB 장치를 물리적인 재연결 없이 다시 인식시키는 방법
; https://www.sysnet.pe.kr/2/0/12047
Passing through devices to Hyper-V VMs by using discrete device assignment
; https://devblogs.microsoft.com/scripting/passing-through-devices-to-hyper-v-vms-by-using-discrete-device-assignment/
의외로 ^^ 모니터는 쉽게 끄도록 해주는군요. 코드도 간단합니다.
using System.Runtime.InteropServices;
namespace ConsoleApp1;
internal class Program
{
const int WM_SYSCOMMAND = 0x0112;
const int SC_MONITORPOWER = 0xF170;
const int MONITOR_OFF = 2;
const int MONITOR_ON = -1;
[DllImport("user32.dll")]
public static extern int SendMessage(int hWnd, int hMsg, int wParam, int lParam);
static void Main(string[] args)
{
SendMessage(-1, WM_SYSCOMMAND, SC_MONITORPOWER, MONITOR_OFF);
}
}
실제로 수행해 보면 잘 동작하는데, 심지어 2개 이상의 모니터를 가진 경우에도 모든 모니터의 전원을 꺼버립니다. ^^ (참고로, MONITOR_ON 동작의 경우, 그다지 매끄럽게 수행이 안 되었습니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]