Комментарии 40
Ждём пост как скачать exe и запустить его.
Если рассматривать как самописное бесплатное средство, которое потом можно дальше развивать, прикручивать опции, то что сказать, это хороший проект. Можно в будущем экономить на средствах мониторинга пользователей типа Стахановец/Стафкоп/
Если рассматривать как реально работающий сервис в локальной сети, то это опасная дорога. С грамотным юристом могут штраф впаять если узнают. Такие средства мониторинга не должны быть скрытыми, пользователь должен быть уведомлен об этом, тем или другим способом.
В работе использую создание скриншотов чтобы следить за рдп сессиями на серверах где автоматически работает мое ПО и мне необходимо контролировать процесс работы.
Может открою Америку не знаю. Не думали сделать привязку выполнения скриншота конкретному событию в системе или к приложению? Так место на диске не будет забиваться не нужными скриншотами.
Программы не должно быть видно на панели задач
В работе использую создание скриншотов чтобы следить за рдп сессиями на серверах где автоматически работает мое ПО и мне необходимо контролировать процесс работы.Скажите, а чем вас не устраивает оперативный контроль с помощью стандартного механизма RDP session shadowing, безо всяких скриншотов?
Если говорить о подглядывании за юзерами со стороны рабодателя, то работодателю не всегда оперативно нужно смотреть, а «по истории».
А как бот догадается, что скрин не соответствует? Это же самое интересное. Спрятать окно программы и скопировать экран в файл — у некоторых это 5 строчек занимает :D
Пример: известно в задаче точно, что пиксель с координатами 100, 200 должен быть в GRB 255, 255, 255. И известно, что если там другой цвет, то это является ошибкой.
При такой проверке важно чтобы разрешение экрана там где берется скриншот не изменялось. Иначе пиксель в другом месте будет.
То ли у вас на любом экране в определенном месте должен быть этот волшебный пиксель, то ли приложение состоит из одной формы. Для своего приложения можно придумать и более изячный способ логирования, а следить за чужим по 1 пикселю как-то самонадеянно.
stackoverflow.com/questions/2846947/get-screenshot-on-windows-with-python
«Компилятор»
www.pyinstaller.org
Заголовок уже есть: «достаточно PowerShell-скрипта на 5 строчек»
$Path = "C:\Temp\Screenshot\"
Add-Type -AssemblyName System.Windows.Forms
$ScreenBounds = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds
$Image = New-Object System.Drawing.Bitmap($screenBounds.Width, $ScreenBounds.Height)
$CopyScreen = [System.Drawing.Graphics]::FromImage($Image)
$Point = New-Object System.Drawing.Point(0, 0)
$CopyScreen.CopyFromScreen($Point,[Drawing.Point]::Empty, $Image.Size);
$СursorBounds = New-Object System.Drawing.Rectangle([System.Windows.Forms.Cursor]::Position, [System.Windows.Forms.Cursor]::Current.Size)
[System.Windows.Forms.Cursors]::Default.Draw($CopyScreen, $СursorBounds)
$CopyScreen.Dispose()
if(![System.IO.Directory]::Exists($Path)){ New-Item -ItemType Directory $Path }
$Image.Save( $path+ "$(get-date -f yyyy.MM.dd_h\h_m\m)"+".jpg" )
$Image.Dispose()
В данной разработке сделано следующее:
1. Программа должна делать скриншоты
2. Программы не должно быть видно на панели задач
3. Возможность задавать интервал в секундах между выполнением скриншота
4. Возможность задавать путь к директории хранилища скриншотов
5. Возможность задавать максимальный размер хранилища скриншотов
6. Очистка самых старых файлов из хранилища скриншотов при достижении максимума в хранилище
7. Логирование работы программы
В Вашем коде п.1 выполнен. Сложно сравнивать.
Разработка рассчитана на относительно небольшое хранилище.
Из плюсов данного решения — если в хранилище попадут другим файлы (а их размер будет другой чем у скриншота), то программа приведет хранилище к необходимому размеру.
P.S. Прячьте портянки кода под спойлеры, пожалуйста. Успехов!
считывание/удаление реально будет вешать ПК — если хранилище сделать на медленный диск и хранить там данные за год. в этом случае да, будет тормозить.
использование Thread.Sleep — нет тут GUI, тормозить нечему. Как и нет большого количества создаваемых потоков.
«тянет на поделку для журнала «Молодой Хакер»» — спасибо за оценку, пусть так )
«Прячьте портянки кода под спойлеры» — спасибо, учту.
"StorageSize принимает аргумент насколько нужно очистить в KB." — исправьте опечатку, пожалуйста. Исторически сложилась "традиция" писать код функций, максимально независимый от другого кода. Цель StorageSize () в приложении всего лишь посчитать размер директории, дефолтной функции в CLR нет, напишем свою
/// <summary>
/// Размер директории в байтах
/// </summary>
/// <param name="location">путь к директории</param>
/// <param name="subDir"></param>
/// <returns></returns>
public long GetDirectorySize(string location, bool subDir = false)
{
if (subDir)
{
return new DirectoryInfo(location).GetFiles("*.*", SearchOption.AllDirectories).Sum(file => file.Length);
}
else
{
return new DirectoryInfo(location).GetFiles("*.*", SearchOption.TopDirectoryOnly).Sum(file => file.Length);
}
}
и ее уже будем использовать в StorageSize () с блоками проверки, и, при необходимости, с параметрами не по умолчанию. Замечу, bool subDir = false не просто так, по дефолту не лезть в поддиректории безопасней. Ну и CheckStorage() потенциально дважды сканирует директорию(ии) — плохо :(
С Праздником!
Как следить (наблюдать) за компьютером. Часть 1 — делаем скриншоты пользователей