오늘은 Windows설정에서 화면 끄기 및 절전모드 전환 시간이 설정되어있는 경우에 해당 시간을 초과해도 특정 프로그램(원하는 프로그램)이 수행 중이면 화면 끄기나 절전모드로 넘어가지 않도록 하는 작업을 해 볼 예정입니다.

 

참고한 포스팅은 아래의 포스팅이며, 아래의 포스팅에 4번의 항목을 가지고 작업을 해 보았습니다.

https://crystalcube.co.kr/40

 

Windows 화면보호기/절전모드 방지하기

Windows 화면보호기/절전모드 방지하기 Intro  미디어 플레이어와 같은 프로그램을 개발하다보면, 고려해야 하는 것이 있습니다. 바로 '미디어 재생중 화면보호기 끄기' 라는 것이죠. 동영상을 열��

crystalcube.co.kr

코드는 정말 간단하고, 화면 디자인을 간단하게 하는 경우에 많이 사용하는, 그냥 제가 익숙한 WPF로 작업을 했습니다.

 

프로그램의 흐름을 살펴보면 아래와 같습니다.

 

1. 초기화 -> 2. Idle 방해 Thread 생성 함수 호출 -> 3. Thread가 30초마다 수행 상태를 Set! -> 4. (창 닫기) 수행 중인 Idle 방해 Thread강제종료

 

위에서 글로 설명한 것을 소스로 간단히 옮기기만 했습니다. 30초라고 설명해두고 소스는 15000ms(15초)로 설정을 해 두었네요....

 

Thread의 이름은 interrupt_thread로 붙여두었으며, 해당 Thread가 수행되는 경우 15초마다 디스플레이와 시스템에 요청 신호를 보냅니다. SetThreadExcutionState 함수 인자로 들어가는 플레그 값의 경우 MS 문서에 자세하게 설명이 되어있습니다.

 

https://docs.microsoft.com/ko-kr/windows/win32/api/winbase/nf-winbase-setthreadexecutionstate?redirectedfrom=MSDN

 

SetThreadExecutionState function (winbase.h) - Win32 apps

Enables an application to inform the system that it is in use, thereby preventing the system from entering sleep or turning off the display while the application is running.

docs.microsoft.com

물론 이동이 어렵거나 귀찮으신 분들을 위해 아래에 옮겨둡니다.

 

제가 사용한 두 가지 flag값은 위에 주황색으로 표시 해 두었으며, 저는 화면과 시스템이 다시 작동하는 상태가 되도록 강제로 상태 값을 변경해 준 것입니다.

 

 

 

 

SetThreadExcutionState()는 Kernel32.dll에 있어서 DllImport를 하여 사용하고, 그러면 위에 using System.Runtime.InteropServices; 

라는 소스를 추가해서 해당 서비스를 사용할 수 있도록 해 줍니다.

 

 

 

 

해당 프로그램을 수행하면, WPF창이 열리고 외형적으로 보이는 작업은 전혀 하지 않으며 15초마다 프로그램이 강제로 디스플레이와 시스템이 잠기지 않도록 상태를 변경해 줍니다.

 

 

해당 작업은 특정 프로그램을 화면보호기처럼 사용하여 해당 프로그램이 구동 중일 때 화면에 원하는 Text를 보여주며, 그 Text를 계속 볼 수 있도록 화면이 잠기는 절전모드로 넘어가거나 모니터가 꺼지는 등의 동작이 일어나지 않게 해 줍니다.

 

 

 

+ Recent posts