Привет! Хочу поделиться с вами своим проектом. Я сделал небольшую программу на Python, которая помогает легко очищать корзину в Windows 10. Этот инструмент — мой собственный open-source проект, и вы можете найти его в моем репозитории на GitHub.
Что Делает Программа?
Очистка Корзины: Ппрограмма очищает корзину без необходимости подтверждения. Просто нажмите кнопку, и все, корзина пуста!
Иконка в Системном Трейе: Программа имеет иконку в системном трее, которая показывает, пуста корзина или нет. Иконка меняется в зависимости от состояния корзины.
Уведомления: Если корзина очищена успешно или возникла ошибка, программа отправит вам уведомление, чтобы вы знали, что произошло.
Код Программы
import ctypes
import threading
import pystray
from pystray import MenuItem as item, Menu as menu
from PIL import Image
import time
import os
import sys
from plyer import notification
class SHQUERYRBINFO(ctypes.Structure):
_fields_ = [
("cbSize", ctypes.c_ulong),
("i64Size", ctypes.c_int64),
("i64NumItems", ctypes.c_int64)
]
def resource_path(relative_path):
""" Получает путь к ресурсам, поддерживает работу с PyInstaller. """
try:
base_path = sys._MEIPASS
except AttributeError:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
def load_icon(icon_path):
return Image.open(resource_path(icon_path))
def show_notification(title, message, icon_path=None):
notification.notify(
title=title,
message=message,
app_icon=icon_path,
timeout=1
)
def empty_recycle_bin(icon, item):
SHEmptyRecycleBin = ctypes.windll.shell32.SHEmptyRecycleBinW
flags = 0x01 # SHERB_NOCONFIRMATION
bin_path = ctypes.create_unicode_buffer(260)
ctypes.windll.shell32.SHGetFolderPathW(0, 0x0005, 0, 0, bin_path)
result = SHEmptyRecycleBin(None, bin_path, flags)
if result == 0 or result == -2147418113:
show_notification("Корзина", "Корзина успешно очищена.", resource_path("icons/minibin-kt-empty.ico"))
update_icon()
else:
show_notification("Корзина", f"Произошла ошибка при очистке корзины. Код ошибки: {result}", "icons/minibin-kt-full.ico")
def exit_program(icon, item):
icon.stop()
def update_icon():
if is_recycle_bin_empty():
tray_icon.icon = load_icon("icons/minibin-kt-empty.ico")
else:
tray_icon.icon = load_icon("icons/minibin-kt-full.ico")
def is_recycle_bin_empty():
rbinfo = SHQUERYRBINFO()
rbinfo.cbSize = ctypes.sizeof(SHQUERYRBINFO)
result = ctypes.windll.shell32.SHQueryRecycleBinW(None, ctypes.byref(rbinfo))
if result != 0:
print("Ошибка при запросе состояния корзины.")
return False
return rbinfo.i64NumItems == 0
def periodic_update():
while True:
update_icon()
time.sleep(3)
def create_tray_icon():
menu_options = (item("Очистить корзину", empty_recycle_bin), item("Выход", exit_program))
tray_menu = menu(*menu_options)
global tray_icon
initial_empty = is_recycle_bin_empty()
tray_icon = pystray.Icon("name", load_icon("icons/minibin-kt-empty.ico") if initial_empty else load_icon("icons/minibin-kt-full.ico"), "Minibin от King Triton", tray_menu)
return tray_icon
if __name__ == "__main__":
tray_icon = create_tray_icon()
threading.Thread(target=periodic_update, daemon=True).start()
tray_icon.run()
Как Это Работает?
Загрузка Ресурсов и Иконок: Программа умеет находить иконки и другие файлы, независимо от того, в каком режиме она запущена — в разработке или после упаковки.
Очистка Корзины: Когда вы выбираете опцию очистки корзины, программа использует системные вызовы Windows 10 для выполнения этой задачи. Если все прошло хорошо, иконка меняется на пустую. В случае ошибки получите уведомление.
Проверка Состояния Корзины: Скрипт регулярно проверяет состояние корзины и обновляет иконку, чтобы вы всегда знали, пуста она или нет.
Создание Значка в Системном Трейе: Я использую библиотеку pystray, чтобы создать иконку в системном трее с простым меню, которое позволяет очистить корзину или выйти из программы.
Итог
Этот проект — мой вклад в мир open-source, и я надеюсь, что он окажется полезным. Программа проста в использовании и делает управление корзиной на Windows 10 легким и удобным. Если вы хотите попробовать её, посетите мой репозиторий на GitHub.
Буду рад любым отзывам и предложениям!
Комментарии (37)
zarnii
30.08.2024 07:52+1Где-то такую утилиту уже видел в 2019-2020 году.....
babypowder
30.08.2024 07:52тогда ему было 20 лет
zarnii
30.08.2024 07:52Нашел вот такую информацию. Пишут, что MiniBin появилась в 2004. А еще, оказывается, от этого же автора есть MicroBin
OrAnGeFoXL
30.08.2024 07:52Тоже давно встречал уже Minibin, но всё равно интересно ознакомиться с исходным кодом, даже, если это другая Minibin
Andrey_Solomatin
30.08.2024 07:52+1Этот проект — мой вклад в мир open-source, и я надеюсь, что он окажется полезным.
Это вклад в ваше образование и портфолио. Это полезно.
Andrey_Solomatin
30.08.2024 07:52+1Инстукции по установке: Скачайте испольняемый файл и запустите его.
Для меня, это карсный флаг. Даже если у вас нет плохих намерений, то у вас могут быть вирусы, которые прописывают себя в каждый .exe файл.Wowhere
30.08.2024 07:52А как распространять программы как не в исполняемых файлах?) Да и наличие инсталятора у программы тоже не является гарантией того что там нет вирусов
dartraiden
30.08.2024 07:52Инсталлятор это же тоже программа. В нём тоже могут быть "вирусы, которые прописывают себя в каждый .exe файл".
Более того, если у программы есть инсталлятор, то вы запускаете, по сути, две программы: сначала программу-инсталлятор, а потом саму программу, которую инсталлятор установил.
KING_TRITON Автор
30.08.2024 07:52учту на будущее этот момент, подскажите пожалуйста если я буду через virustotal проверять и ссылку прикладывать этого будет достаточно?
Andrey_Solomatin
30.08.2024 07:52Один из вариантов, сделать сборку прозрачной. Запихнуть в Докер или GitHub actions. Тогда кто хочет сможет посмотреть на процесс сборки и даже собрать самостоятельно. Тудаже и вирус тотал можно прикрутить. https://github.com/marketplace/actions/virustotal-github-action
Если вы скачиваете Pycharm с сайта JetBrains, то там есть такая строка: Download and verify the file SHA-256 checksum.
PS. У вас очень спецефичная программа с узким набором клиентов, все эти улучшения могут вообще на отразится на колличестве скачиваний.KING_TRITON Автор
30.08.2024 07:52я сделал сборку .exe через Github Action и проверку через virustotal (https://github.com/king-tri-ton/minibin/actions/runs/10638089908), теперь я так понимаю все будет прозрачно?
dartraiden
30.08.2024 07:52+2Непонятная претензия. Код открыт. Скомпилируйте сами.
А как вы другие программы используете? Не в виде исполняемых файлов?
KING_TRITON Автор
30.08.2024 07:52А как вы другие программы используете? Не в виде исполняемых файлов?
все программы которые создаю, использую как исполняемые файлы .exe,
компилирую через pyinstaller
Grey83
А что, в 10-ке отключили возможность размещать значок корзины на рабочем столе?
В трее вроде её можно было размещать в XP.
Из усовершенствований вижу только иконку в трее и отсутствие подтверждения.
Может стоило бы добавить возможность включения/отключения этого самого подтверждения: вдруг оно кому-то всё же нужно?
Ну и 8МБ для такой утилиты как-то многовато, кмк.
KING_TRITON Автор
согласен, но, делал под себя, а иконки рабочего стола я скрыл полностью, мне удобно по трею ориентироваться, по поводу включения и отключения уведомления, думал, может потом сделаю
EasyMoney322
На 10-ке, на 11 и на серверах (с Desktop Experience, очевидно) по-прежнему есть. Включается в персонализации->Темы->Иконки рабочего стола. Плюс можно на "Начальном экране" закрепить.
Насколько я понял из статьи, концепт именно в отсутствии подтверждения очистки и отображении её состояния в системном "Трейе".
KING_TRITON Автор
в целом да, а на начальном экране я закреплял, не удобно лично мне