PrintWindow
- довольно тонкая операция.Что он действительно делает, так это отправляет сообщение WM_PRINT
в очередь для рассматриваемого окна, в данном случае рабочего стола, и надеется, что это окно ответит на WM_PRINT
правильно, если вообще (см. здесь и здесь ).
Я повторил ваше поведение, но я не уверен на 100%, почему оно тоже не работает.Возможно, вы не можете вызвать PrintWindow
на HWND
, которому не принадлежит ваш процесс, или, возможно, рабочий стол не отвечает на сообщения WM_PRINT
.
Вторая ссылка выше содержит комментарий об использовании BitBlt
вместо:
Попробуйте получить дескриптор (HWND) для окна рабочего стола - и используйте BitBlt
для захвата всего содержимого.Имейте в виду - вы будете захватывать только то, что видно на экране.
Может быть, это помогает.