Мне необходимо делать скриншот Winlogon-десктопа.
На форме расположен таймер (1 сек). Его обработчик:
Код:
procedure TForm18.Timer1Timer(Sender: TObject);
var
bmp: TBitmap;
DCDesk: HDC;
FileName: String;
begin
bmp := TBitmap.Create;
bmp.Height := Screen.Height;
bmp.Width := Screen.Width;
DCDesk := GetWindowDC(GetDesktopWindow);
BitBlt(bmp.Canvas.Handle, 0, 0, Screen.Width, Screen.Height, DCDesk, 0, 0, SRCCOPY);
FileName := 'Screenshot_' + FormatDateTime('mm-dd-yyyy-hhnnss', Now());
if not DirectoryExists(ExtractFilePath(Application.ExeName) + 'Screenshots') then
CreateDir(ExtractFilePath(Application.ExeName) + 'Screenshots');
bmp.SaveToFile(Format(ExtractFilePath(Application.ExeName) + 'Screenshots\%s.bmp', [FileName]));
ReleaseDC(GetDesktopWindow, DCDesk);
bmp.Free;
end;
Запуск экзешника производится под пользователем SYSTEM.
В других версиях Windows все скрины получатся нормальными, а вот в Server 2012R2 если заблокировать комп (в это время скрины нормальные) и нажать на кнопку "Сменить пользователя" на экране блокировки, все дальшейшие скрины получаются пустыми (полностью белая заливка). Может кто подскажет в какую сторону копать?