Показать сообщение отдельно
  #1  
Старый 01.11.2011, 01:29
barmaley barmaley вне форума
Прохожий
 
Регистрация: 01.11.2011
Сообщения: 5
Репутация: 10
По умолчанию Не получается сделать screenshot в программе запущенной под учетной записью SYSTEM

Здравствуйте! Пишу программу, которая должна делать снимок экрана (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;
Ответить с цитированием