Запись действий пользователя (C#)

10 000 руб. за проект
30 мая 2020, 12:29 • 2 отклика • 43 просмотра
Разработать приложение-логгер для записи действий пользователя и снятия скриншотов действий пользователя.

  1. Приложение должно быть реализовано на C# (при необходимости использования оконных классов желательно использовать WinForms, а не WPF, т.к. планируется встраивание в уже существующий проект на WinForms).
  2. После запуска приложение должно постоянно находиться в памяти. Окна приложения не нужны. Нужна иконка в трее с пунктами Автозагрузка (галочка), Логи... (открывает папку программы) и Выход. Приложение не должно выдавать никаких сообщений об ошибках - только писать их в текстовый лог при необходимости. Приложение не должно препятствовать завершению работы Windows. Приложение не должно сопротивляться закрытию своего процесса, а также не должно запускаться второй раз, если одна копия уже запущена. Приложение должно быть достаточно стабильным, чтобы проработать несколько недель без вылетов и перезапусков.
  3. При запуске приложение должно прописать себя в автозагрузку, если ещё не прописано. По нажатию комбинации клавиш Ctrl + Alt + Shift + S программа должна убрать себя из автозагрузки и завершиться.
  4. Следить за появлением на экране новых окон, активацией окон, кликами в них (левые, правые, средние, скроллы колёсиком), нажатием клавиш клавиатуры (в том числе комбинации клавиш) и писать все экранные и клавиатурные события в файл лога в табличку в формате CSV. Каждая новая запись должна добавляться таким образом, чтобы при внезапном завершении программы все накопленные до этого момента записи остались в файле лога.
Поля таблицы:

  • Дата и время (до миллисекунд)
  • Событие
Activate - активация окна;
LClick - левый клик;
RClick - правый клик;
MClick - средний клик;
ScrollUp - скролл вверх;
ScrollDown - скрол вниз;
Drag - перетаскивание (mouse down + mouse move + mouse up);
ClipboardCopy - копирование в буфер обмена;
ClipboardPaste, вставка из буфера обмена,
KeyboardShorcut - нажатие комбинации клавиш,
KeyboardInput - ввод текста с клавиатуры;

  • Название приложения (процесса);
  • Путь к приложению (процессу);
  • Заголовок активного окна;
  • Имя класса активного окна;
  • Текст
    • Для событий клавиатуры - завершенный ввод текста, после которого последовало не клавиатурное событие или нажатие системных клавиш кроме пробела. То есть надо записывать не каждую кнопку отдельно, а накапливать текст до другого клика или до нажатия Enter, Escape, стрелок и т.д.
    • Для событий буфера обмена - содержимое буфера обмена;
    • Для кликов и других событий мыши - текст элемента управления под курсором, который можно добыть с помощью GetWindowText или подобными методами.
  • Координаты мыши относительно верхнего-левого угла активного окна ([X, Y] для клика, [X1, Y1, X2, Y2] - для drag);
  • Имя компьютера;
  • Название рабочей группы / домена компьютера
  • Имя пользователя компьютера;
  • IP адрес (желательно основного адаптера);
  • Текущий URL из адресной строки браузера (для основных браузеров - Chrome, IE, Edge, Firefox, Opera), если активным окном является этот браузер. Это надо сделать без плагинов. Во всех упомянутых выше браузерах структура окна такая, что через GetWindowText и оконные сообщения получить этот текст невозможно. Однако его можно получить например через интерфейс UIAutomation.
  • GUID скриншота активного окна.
    В моменты активации новых окон, любых кликов по элементам управления, нажатия и отпускания кнопок мыши, начала и окончания печати текста или нажатия комбинации клавиш делать скриншот активного окна и сохранять его в формате png в подпапку Captured папки программы, имя файла должно быть случайным GUID, который записывается в соответствующее поле таблицы.

В приоритете исполнители, которые уже делали подобные задачи, т.е. могут переиспользовать свой готовый код или точно знают как решить эту задачу. Пожалуйста, указывайте в откликах, если уже делали подобные проекты.
Отзывы
Исполнитель сделал всё качество, был внимателен к деталям, всегда на связи, легко шёл на контакт и погружался в нюансы задачи, без проблем вносил корректировки и необходимые изменения. Приятно работать, рекомендую.
4 года назад
 
4 года назад