Здравствуйте! Пишу программу, которая должна делать снимок экрана (screenshot) и отправляет его на ftp-сервер. Проблема заключается в следующем: если программа запускается под простым пользователем - проблем не возникает, и она благополучно создает снимок, но если она запускается под пользователем SYSTEM, то в место снимка экрана получается, лишь белый квадрат и никакого изображения. Вероятней всего, API-функция GetWindowDC, не возвращает контекст устройства и из-за этого не получатся создать screenshot. Как можно корректно сделать снимок экрана в контексте процесса запущенного от пользователя SYSTEM?
Код:
function GetScreen: string; // функция создания снимка экрана
var
Bmp: TBitmap;
Jpg: TJpegImage;
ScreenImage: string;
begin
Bmp := TBitmap.Create;
Jpg:= TJpegImage.Create;
Bmp.Height := GetSystemMetrics(SM_CYSCREEN);
Bmp.Width := GetSystemMetrics(SM_CXSCREEN);
bitblt(Bmp.Canvas.Handle, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), GetWindowDC(0), 0, 0, SRCCOPY);
Jpg.Assign(Bmp);
ScreenImage := Format('%s%s_%s_%s.jpg', [GetTempDir, __GetUserName, DateToStr(Now), StringReplace(TimeToStr(Now), ':', '-', [rfReplaceAll])]);
Jpg.SaveToFile(ScreenImage);
Jpg.Free;
Bmp.Free;
result := ScreenImage;
end;