Duplicate Files Remover

Обзоры Duplicate Files Remover - Удаление дубликатов файлов 1.2

Переводчик Google

Dragokas

Angry & Scary Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
7,871
Решения
27
Реакции
7,007
Dragokas добавил(а) новый ресурс:

Duplicate Files Remover - Утилита для поиска и удаления дубликатов файлов любого типа

Сегодня на обед кое-что простое, но полезное.
Таких утилит наверное множество, но хотелось сделать своё, что работает по понятному алгоритму, быстро, с современными технологиями и без сюрпризов внутри.

Назначение:
Поиск и удаление идентичных файлов из указанных папок (нужно перетащить их на окно программы (Drag & Drop)).

Посмотреть вложение 115307

Технологии

  • Многопоточный поиск файлов с оптимизацией через SQLite...

Узнать больше об этом ресурсе...
 
Почему-то drag-n-drop не работает, при наведении показывает ❌

UPD пришлось добавлять кнопку browse через исходники
 
Последнее редактирование:
Dragokas обновил(а) ресурс Duplicate Files Remover новой записью:

1.2

  • Перетаскивание файлов теперь работает даже при запуске с повышенными правами
  • Новая кнопка «Добавить папку»
  • Новая кнопка «Очистить список»
  • Контекстное меню на первой форме
  • Подтверждение перед удалением дубликатов
  • Контекстное меню «Открыть папку» на второй форме
  • Улучшен пользовательский интерфейс, поддержка изменения размера и полноэкранного режима

Узнать больше об этом обновлении...
 
@BlendLog а запускал с повышенными правами? Если да, то это ожидаемое поведение, из-за изоляции UIPI. Она запрещает drag & drop из-под процесса с более низким уровнем целостности. Для его обхода часто применяют ChangeWindowMessageFilterEx + WM_DROPFILES / WM_COPYDATA / WM_COPYGLOBALDATA. Но это не сработает с C# формами, т.к. они построены на базе COM. Даже если попытаться разрешить фильтр на хендлах окон (this.Handle), вернет результат true, но drag & drop работать все равно не будет.

Чтобы обойти эту проблему, в обновлении я создал настоящее Win32 окно без оберток, и сделал его в качестве оверлея со стилем WS_POPUP - класс DragDropOverlay.cs. Оно не является настоящим дочерним окном (параметр WS_CHILD не используется). При попытке сделать его дочерним, прорисовка этого окна вступает в конфликт с прорисовкой нижнего слоя (окна WinForms), в итоге получается каша, а DnD перестает работать. В итоге, принял решение двигать окно событием параллельно с движением формы WinForms. Думаю, вышло неплого, разве что только при анимации входа в полноэкранный режим получается слегка дергано. Кстати, несмотря на то что окно не дочернее, хендл родительского окна все равно необходимо передавать при создании окна, иначе окно перестанет быть поверх WinForms при смене фокуса. Также, чтобы это сработало у WinForms должно быть отключено свойство AllowDrop. Оба они (включенный дроп у WinForms, и у Win32 окна конфликтуют между собой, и DnD перестает работать :) В итоге, AllowDrop отключается, если апка запущена от админа, и включена если без. Т.е. без админа - DnD работает по всей форме, а от админа - только на зеленую штучку:

1771180052649.webp
 
Последнее редактирование:
Назад
Сверху Снизу