Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2020, 22:00   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Служба мониторинга

Хочу написать службу, которая будет делать скрины, когда система в работе. В обычном приложении проблем нет, а вот в службе полный разнос.

Код:
procedure Tsc.MakeScreen;
var
  Path: String;
  ScreenDC: HDC;
  Image: TImage;
  Canvas: TCanvas;
  JPG: TJPEGImage;
begin
  Path := 'путь';
  if not TDirectory.Exists(Path) then TDirectory.CreateDirectory(Path);
  ScreenDC := GetDC(0);
  Image := TImage.Create(nil);
  Canvas := TCanvas.Create;
  Canvas.Handle := ScreenDC;
  Image.Width := Screen.Width;
  Image.Height := Screen.Height;
  Image.Canvas.CopyRect(Rect(0, 0, Image.Width, Image.Height), Canvas, Rect(0, 0, Screen.Width, Screen.Height));
  ReleaseDC(0, ScreenDC);
  JPG := TJPEGImage.Create;
  JPG.Assign(Image.Picture.Bitmap);
  JPG.CompressionQuality := 100; // Устанавливаем параметры качества. Должно быть от 1 до 100. Если 100, то качество наилучшее, 1 наихудшее
  JPG.Compress; // Производим сжатие данных картинки
  // Запись без прав Администратора будет выдавать ошибку в местах где они нужны (Program Files и т.д.)
  try
    JPG.SaveToFile(Path + '\' + FormatDateTime('yyyymmdd_hhmmss', Now) + '.jpg');
  except
  end;
  FreeAndNil(Image);
  FreeAndNil(Canvas);
  FreeAndNil(JPG);
end;
Создаёт скрины, где пустота
Код:
function LastInput: DWord;
var
  LInput: TLastInputInfo;
begin
  LInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LInput);
  Result := (GetTickCount - LInput.dwTime) div 1000;
end;
Отлов события занятости системы тоже не работает
Shouldercannon вне форума Ответить с цитированием
Старый 11.06.2020, 07:12   #2
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Хак
Код:
ScreenDC := GetDC(0) больше не работает.
теперь только официально.
Код:
Window:=GetDesktop();
ScreenDC := GetWindowDC(Window);
Повторому вопросу делайте хук на клаву и мышь.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 11.06.2020 в 07:31.
Pavia вне форума Ответить с цитированием
Старый 15.06.2020, 12:44   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
По умолчанию

К сожалению сервис не интерактивный, потому и не может сделать скрин рабочего стола. Даже установка взаимодействия с рабочим столом не помогает.
Shouldercannon вне форума Ответить с цитированием
Старый 19.06.2020, 10:10   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Цитата:
Сообщение от Shouldercannon Посмотреть сообщение
К сожалению сервис не интерактивный, потому и не может сделать скрин рабочего стола. Даже установка взаимодействия с рабочим столом не помогает.
И не поможет. Интерактивность служб была запрещена с выходом висты или семерки, не помню уже. Теперь только через приложение или драйвер, увы.
Баламут вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Служба 5cek Общие вопросы Delphi 1 28.11.2014 16:14
Служба "Служба профилей пользователей" Xezon Операционные системы общие вопросы 3 25.03.2014 16:54
Служба .NET Form_13 Общие вопросы .NET 1 30.10.2011 10:53
Служба OrdJONY Win Api 5 10.10.2007 12:14
служба MAcK Win Api 3 04.12.2006 20:05