Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE2 (Pulsar)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
program DoScreenshots;
 
uses
  Windows,
  SysUtils,
  Graphics,
  JPEG;
 
{$R *.res}
 
// делает скриншот экрана с заданным качеством и сохраняет в папку
// имя файла соответствует Prefix-YYYY-MM-DD-HH-NN-SS.jpg
function GetScreenShot(ADirectory, APrefix: string; ACompressionQuality: Integer): string;
var
  Bmp: TBitmap;
  Jpg: TJpegImage;
  DC: HDC;
begin
  Bmp := TBitmap.Create;
  Jpg := TJpegImage.Create;
  try
    Bmp.Height := GetSystemMetrics(SM_CYSCREEN);
    Bmp.Width := GetSystemMetrics(SM_CXSCREEN);
 
    DC := GetDC(0);
    try
      bitblt(Bmp.Canvas.Handle, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN), DC, 0,
        0, SRCCOPY);
    finally
      ReleaseDC(0, DC);
    end;
 
    Jpg.CompressionQuality := ACompressionQuality;
    Jpg.Assign(Bmp);
 
    ADirectory := IncludeTrailingPathDelimiter(ADirectory);
    ForceDirectories(ADirectory);
    Result := ADirectory + APrefix + '-' + FormatDateTime('YYYY-MM-DD-HH-NN-SS', Now) + '.jpg';
 
    Jpg.SaveToFile(Result);
    // 1. Сделано 200 скриншотов, среднее время 228,6 ms
    // 2. Скомпилированный под Delphi7 выполняется в 1.5-2 раза быстрее, чем под XE2
 
  finally
    Jpg.Free;
    Bmp.Free;
  end;
end;
 
var
  LInput: TLastInputInfo;
  Screenshots: cardinal; // сколько сделано скриншотов в данном процессе
  Ticks, delta: cardinal; // время, потраченное на создание скриншотов
  IdleTime: cardinal; // время бездействия в мсек
  UserIsActive: Boolean;
  Seconds: cardinal;
 
begin
  Screenshots := 0;
  Ticks := 0;
  Seconds := 0;
  try
    repeat
      // определяем время бездействия
      LInput.cbSize := SizeOf(TLastInputInfo);
      GetLastInputInfo(LInput);
      IdleTime := (GetTickCount - LInput.dwTime);
      UserIsActive := IdleTime <= FSettings.MaxIdleTime * 1000;
 
      // делаем скриншот 1 раз в 10 сек
      if Seconds mod 10 = 0 then begin
        if UserIsActive then begin
          try
            delta := GetTickCount;
            GetScreenShot(FSettings.ScreenshotsPath, FSettings.Prefix, FSettings.JpegQuality);
            Inc(Screenshots);
            Inc(Ticks, GetTickCount - delta);
            // сбросим в лог статистику
            if Screenshots mod 100 = 0 then begin
              LogLine(Format('%d screenshots, aver. time %0.1f ms',  [Screenshots, Ticks / Screenshots]));
            end;
          except
            on E: Exception do
              LogLine('Error: ' + E.Message, True);
          end;
        end;
      end;
 
      Sleep(1000);  
      Inc(Seconds);
    until False;
  except
    on E: Exception do
      LogLine('Error: ' + E.Message, True);
  end;
 
end.
 

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 15:57 01-09-2013 | Исправлено: XPerformer, 15:58 01-09-2013
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE2 (Pulsar)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru