@@ -410,11 +410,13 @@ DWORD SvcCtrlHandler(DWORD dwCtrl, DWORD dwEventType, LPVOID lpEventData, LPVOI
410410 EventCallbackStatus = NULL ;;
411411 Log (" ** System resumed from low power state (Automatic)." );
412412 DispatchSystemPowerEvent (SYSTEM_EVENT_RESUMEAUTO);
413+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = true ;
413414 break ;
414415 case PBT_APMRESUMESUSPEND:
415416 EventCallbackStatus = NULL ;;
416417 Log (" ** System resumed from low power state." );
417418 DispatchSystemPowerEvent (SYSTEM_EVENT_RESUME);
419+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = true ;
418420 break ;
419421 case PBT_APMSUSPEND:
420422
@@ -427,16 +429,19 @@ DWORD SvcCtrlHandler(DWORD dwCtrl, DWORD dwEventType, LPVOID lpEventData, LPVOI
427429 {
428430 Log (" ** System is shutting down (low power mode)." );
429431 DispatchSystemPowerEvent (SYSTEM_EVENT_SUSPEND);
432+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
430433 }
431434 else if (EventCallbackStatus == SYSTEM_EVENT_UNSURE)
432435 {
433436 Log (" WARNING! Unable to determine if system is shutting down or restarting. Please check 'additional settings' in the UI." );
434437 DispatchSystemPowerEvent (SYSTEM_EVENT_UNSURE);
438+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
435439 }
436440 else
437441 {
438442 Log (" ** System is suspending to a low power state." );
439443 DispatchSystemPowerEvent (SYSTEM_EVENT_SUSPEND);
444+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
440445 }
441446 break ;
442447 case PBT_POWERSETTINGCHANGE:
@@ -451,16 +456,19 @@ DWORD SvcCtrlHandler(DWORD dwCtrl, DWORD dwEventType, LPVOID lpEventData, LPVOI
451456 {
452457 Log (" ** System requests displays OFF." );
453458 DispatchSystemPowerEvent (SYSTEM_EVENT_DISPLAYOFF);
459+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
454460 }
455461 else if (PBS->Data [0 ] == 2 )
456462 {
457463 Log (" ** System requests displays OFF(DIMMED)." );
458464 DispatchSystemPowerEvent (SYSTEM_EVENT_DISPLAYDIMMED);
465+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
459466 }
460467 else
461468 {
462469 Log (" ** System requests displays ON." );
463470 DispatchSystemPowerEvent (SYSTEM_EVENT_DISPLAYON);
471+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = true ;
464472 }
465473 }
466474 else
@@ -493,17 +501,20 @@ DWORD SvcCtrlHandler(DWORD dwCtrl, DWORD dwEventType, LPVOID lpEventData, LPVOI
493501 {
494502 Log (" ** System is shutting down." );
495503 DispatchSystemPowerEvent (SYSTEM_EVENT_SHUTDOWN);
504+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
496505 }
497506 else if (EventCallbackStatus == SYSTEM_EVENT_UNSURE)
498507 {
499508 Log (" WARNING! Unable to determine if system is shutting down or restarting. Please check 'additional settings in the UI." );
500509 DispatchSystemPowerEvent (SYSTEM_EVENT_UNSURE);
510+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
501511 }
502512 else
503513 {
504514 // This does happen sometimes, probably for timing reasons when shutting down the system.
505515 Log (" WARNING! The application did not receive an Event Subscription Callback prior to system shutting down. Unable to determine if system is shutting down or restarting." );
506516 DispatchSystemPowerEvent (SYSTEM_EVENT_UNSURE);
517+ Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows = false ;
507518 }
508519
509520 ReportSvcStatus (SERVICE_STOP_PENDING, NO_ERROR, 20000 );
@@ -693,6 +704,10 @@ bool ReadConfigFile()
693704 if (!j.empty () && j.is_number ())
694705 Prefs.BlankScreenWhenIdleDelay = j.get <int >();
695706
707+ j = jsonPrefs[JSON_PREFS_NODE][JSON_RDP_POWEROFF];
708+ if (!j.empty () && j.is_boolean ())
709+ Prefs.PowerOffDuringRDP = j.get <bool >();
710+
696711 Log (st);
697712 Log (" Configuration file successfully read" );
698713 Log (ty);
@@ -1064,7 +1079,51 @@ void IPCThread(void)
10641079 Log (" IPC, User is idle." );
10651080 DispatchSystemPowerEvent (SYSTEM_EVENT_USERIDLE);
10661081 }
1067-
1082+ else if (param == " remoteconnect_busy" )
1083+ {
1084+ if (Prefs.PowerOffDuringRDP )
1085+ {
1086+ Log (" IPC, Remote session connected. User idle management disabled, Powering off managed displays." );
1087+ DispatchSystemPowerEvent (SYSTEM_EVENT_DISPLAYOFF);
1088+ }
1089+ else
1090+ Log (" IPC, Remote session connected. User idle management disabled." );
1091+ }
1092+ else if (param == " remoteconnect_idle" )
1093+ {
1094+ if (Prefs.PowerOffDuringRDP )
1095+ {
1096+ Log (" IPC, Remote session connected. User idle management disabled. Powering off managed displays." );
1097+ DispatchSystemPowerEvent (SYSTEM_EVENT_DISPLAYOFF);
1098+ }
1099+ else
1100+ {
1101+ Log (" IPC, Remote session connected. User idle management disabled" );
1102+ DispatchSystemPowerEvent (SYSTEM_EVENT_UNBLANK);
1103+ }
1104+ }
1105+ else if (param == " remoteconnect" )
1106+ {
1107+ if (Prefs.PowerOffDuringRDP )
1108+ {
1109+ Log (" IPC, Remote session connected. Powering off managed displays." );
1110+ DispatchSystemPowerEvent (SYSTEM_EVENT_DISPLAYOFF);
1111+ }
1112+ else
1113+ Log (" IPC, Remote session connected." );
1114+ }
1115+ else if (param == " remotedisconnect" )
1116+ {
1117+ if (Prefs.DisplayIsCurrentlyRequestedPoweredOnByWindows )
1118+ {
1119+ Log (" IPC, Remote session disconnected. Powering on managed displays." );
1120+ DispatchSystemPowerEvent (SYSTEM_EVENT_DISPLAYON);
1121+ }
1122+ else
1123+ {
1124+ Log (" IPC, Remote session disconnected." );
1125+ }
1126+ }
10681127 }
10691128 else
10701129 {
0 commit comments