Однажды я использовал функцию GetForegroundWindow()
, чтобы определить, работает ли хранитель экрана. Если возвращаемое значение было NULL
, то экранная заставка (или, предположительно, заблокированная рабочая станция) была активна. Обратите внимание, что это было в первые дни Windows NT, не было документировано, чтобы сделать это, и нет никакой гарантии, что она будет делать то же самое сегодня.
Глядя на справку по Win32 API, вы можете использовать что-то вроде OpenInputDesktop()
, чтобы получить HDESK
текущего активного рабочего стола. Если вы не можете получить дескриптор рабочего стола или если он отличается от рабочего стола вашего потока, то ваше приложение работает на рабочем столе, который не активен (и рабочая станция, вероятно, либо находится в состоянии экранной заставки, либо заблокирована). Нет гарантий, что этот метод будет работать, но, возможно, стоит изучить его.