Bginfo ломает обои? Напиши свой и сделай его лучше — конкурс пет-проектов
Как я создал аналог программы bginfo, которая выводит информацию о системе и пользователе на рабочий стол, но не ломает смену обоев.
2К открытий5К показов
Привет, уважаемый читатель! Меня зовут Дмитрий, я инженер техподдержки со стажем 10 лет. Самостоятельно изучаю Рython. Хочу сменить работу в техподдержке на разработку.
Сегодня я хочу рассказать о своем пет-проекте, который родился в голове, когда я устроился в одну крупную фирму инженером техподдержки.
Думаю, многим знакома такая программа, как BGinfo. Если не знаете, то эта программа выводит информацию о ПК на рабочий стол.
После начала работы в компании я понял, что данная программа довольно удобная: можно сразу узнать имя ПК, пользователя, домен, ip адрес и прочее, что помогает быстрее диагностировать проблемы, а также проводить инвентаризацию.
Спустя какое-то время я обнаружил у этой программки неприятный баг. Когда подключены два и более мониторов, после срабатывания BGinfo ломалось изображение, и приходилось руками менять положение с режима “Замостить” на “Заполнение”.
Но это еще полбеды. На просторах интернета я нашел программу Bing Wallpapper, которая запала мне в душу. Принцип простой: каждый день эта программа ставит на рабочий стол картинку дня, там и красивые пейзажи, и животные. Ну и какое-никакое разнообразие.
Так вот, BGinfo отключает автоматическую смену обоев. Так и родилась идея проекта.
Проект я назвал максимально “круто” — Corporate_Wallpaper_and_sys_info.
При начале разработки я подумал, что, в принципе, ничего сложного в этом проекте нет, и с места в карьер прыгнул в PyCharm.
Параметры ПК
Начал я с того, какие параметры выдает нам BGinfo, а именно: Host Name, Serial Number, IP Adress, Machine Domain, Logon Domain, Logon Server, User Name, OS Version, Build Number, OS Build, SCCM Client Version, Edge Version.
И тут понеслось гугление, была написана функция get_pc_info, в которой собиралась вся информация о ПК.
Часть информации получалась из командной строки, часть из реестра, часть из свойств файла .exe, как например, информация о версии MS edge.
Использовал библиотеки time, winreg, platform, socket, os, subprocess.
Приведу пример нескольких запросов, т.к. функция довольно длинная:
А самое интересное, с чем столкнулся — это вычисление аптайма. Сперва делаем запрос через powershell времени последней загрузки. Далее удаляем лишние символы и приводим к стандарту библиотеки datetime. После этого получаем текущее время и вычитаем из текущего времени время загрузки.
Создание waterpark
После сбора параметров встал вопрос, как же все это дело отобразить на мониторе. И тут нашлась библиотека Pillow, которая умеет редактировать изображения.
Прочитал кучу статей и документации и смог создать Watermark с информацией о ПК.
В коде выше мы создаем изображение с прозрачным фоном и записываем все полученные параметры из функции выше. После вставляем в этот watermark логотип компании, а цельное изображение вставляем в картинку для рабочего стола.
При вставке логотипа компании столкнулся с тем, что когда я вставлял изображение .jpg в картинку с прозрачным фоном, то фон с прозрачного менялся на черный. Решилась эта задачка довольно просто:
При вставке логотипа, логотип нужно конвертировать в RGBA.
В общем итоге мы получили картинку, какая и была у пользователя, но теперь с watermark. Осталось только установить на рабочий стол. Быстрый поиск выдал простую функцию:
В зависимости от разрядности системы функции отличаются, и пришлось добавить проверку разрядности системы.
Но на этом я не остановился и решил добавить автосмену обоев: обои должны быть каждый день новые.
Как я выше писал, мне очень понравилась программа bing wallpaper. Пришлось спарсить страничку bing и сохранить изображение.
Настройки
А что, если пользователь не захочет менять обои? Я начал думать над созданием config файла. Сначала config сделал в формате .py. Удобно, можно его просто импортировать и работать с ним, но я отказался в пользу .ini и библиотеки ConfigParser.
В конфиг я добавил месторасположение сохранения картинки Bing и логотипа компании, добавил автосмену обоев.
Подключил все это через функцию read_config и библиотеки ConfigParser.
Тут же возникла проблема: а если не будет конфига, что делать? Написал функцию проверки конфига, и если его нет, то он будет создан.
Тут мне понадобилась функция getcwd() библиотеки os, которая возвращает путь до запущенного файла, чтобы в этой директории создать конфиг и, тем самым, сделать программу портативной.
Если у пользователя автосмена выключена, тогда нет смысла скачивать изображение, а достаточно получить путь до изображения, которое сейчас установлено у него на рабочем столе. Сделал функцию проверки автосмены:
Получаем путь до обоев пользователя:
Используем путь до обоев, чтобы вставить на него наш логотип и установить на рабочий стол, как мы это делали в коде ранее.
Для постоянной работы создал цикл while, добавив туда запуск функций и time.sleep(3600) для ежечасного обновления информации. Ресурсов потребляет не много.
Во время создания программы я сменил место работы и предложил идею своей программы руководству на новом месте, ранее подобные программы компания не использовала.
Идея руководству понравилась, и программу пообещали внедрить в компании.
Спасибо, что дочитали до конца. Это моя первая статья, прошу сильно не пинать.
Да и программировать я только учусь, в окружении разработчиков у меня нет, все писалось, тестировалось и улучшалось самостоятельно.
Возможно, я что-то сделал неправильно или неэстетично, но этот проект позволил мне поработать с файловой системой Windows, изучить новые библиотеки и столкнуться с различными нюансами разработки. После разработки я разобрался в auto-py-to-exe, чтобы запуск совершался одной кнопкой, и покопался в реестре, дабы добавить программу в автозапуск.
Если вам понравился проект, и вы хотите посмотреть его полностью, то вот ссылка на GitHub:
2К открытий5К показов