Короткий ответ, который я нашел, это то, что вы не можете. Вы не можете сделать снимок экрана неактивного рабочего стола, потому что нет вызовов рисования, потому что нет видимых окон для перерисовки.
Вы можете выполнить вызов SwitchDesktop (), сделать снимок экрана, а затем выполнить SwitchDesktop () обратно. Пользователь не заметит этого, но вы, вероятно, не получите много на скриншоте, потому что за это короткое время окна не успели перерисовать.
Другое дело, что вы должны создать новый поток для вызова SetThreadDesktop (). Если вы используете для этого основной поток, он потерпит неудачу при использовании приложения с графическим интерфейсом. SetThreadDesktop () завершается ошибкой, когда у вас есть окно на текущем рабочем столе.
SysInternals имеет приложение для управления несколькими рабочими столами (например, переключатель рабочего стола linux). Когда вы собираетесь выбрать рабочий стол, чтобы переключиться на него, вы увидите миниатюру рабочего стола. Это миниатюра не является активной, она фиксируется последней известной полной перерисовкой, когда пользователь находится на этом рабочем столе. Короче говоря, если SysInternals не может сделать живой снимок экрана, я сомневаюсь, что кто-либо из нас будет.
Это, конечно, основано на моем собственном исследовании этой особенности. Если бы кто-то действительно заставил это работать, я хотел бы знать, таким образом, я не могу использовать это также!