rezorustavi
- Стаж: 8 лет 10 месяцев
- Сообщений: 918
- Репутация:55[+] [-]
- Откуда: Грузия, город Рустави
|
AZJIO, FileSizesList-x64-icon и FileSizesList-x32-icon при проверки некоторых папок с D диска вылетают, остальные работают. Windows 10 Ltsc x64. В каких папках заметил вылеты: В одной папке ярлыки, в другой папке файлы с .cpt Update: И в других некоторых папках с разными фалами вылеты у FileSizesList-x64-icon и FileSizesList-x32-icon. Видео
Последний раз редактировалось: rezorustavi (2021-11-10 14:22), всего редактировалось 4 раз(а)
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Сделал тему на офсайте, может кто предложит лучший алгоритм. Кому интересно, могут запустить DebugView и получить число иконок, которые получены при генерации списка.
|
rekshd
- Стаж: 5 лет 10 месяцев
- Сообщений: 331
- Репутация:7[+] [-]
|
Проверял всё на Windows 7 SP1 RU x64 Самая стабильная и корректно работающая версия из последних оказалась FileSizesList-x64-CheckBox.exe Там и нормальная иконка в контекстном меню "Открыть в программе" Версии с иконками прорисовывают отнюдь не все иконки, да и то выборочно Например, в одной папке иконки файлов exe показываются, а в другой папке нет - и закономерность мне отследить не удалось ... Во-вторых с иконками действительно программа срабатывает медленнее на треть Похоже я напрасно Вам подал эту идею по иконкам. Не нужны эти красивости в ущерб функционалу и скорости. Насчёт удаления через чекбосы - после удаления в меню остаётся надпись на месте удалённых папок "Удалено*" Подумайте, Может есть смысл после удаления сразу перерисовать\обновить состояние папок. Чтоб этой надписи "Удалено*" не было ? Ведь кэш программы на момент удаления уже заполнен и перерисовка произойдёт практичекски моментально. Повторюсь, версия с чекбосами x64 у меня работает абсолютно стабильно. Огромное Вам Спасибо за эту полезняшку И второй вопрос. Я не смог разобраться - как через ini файл включать и отключать использование чекбосов ... Думаю, стоит вынести эту настройку в ини и по умолчанию сделать запуск программу без чекбоксов. Всё-таки это функция для специалистов, а не для обычных пользователей А спец легко сможет включить использование чекбоксов через ини файл (прочитав help.txt) Добавлено через 8 минут 34 секунды: AZJIO,На Win10 иконки покрасивее поэтому можно было бы и без иконок. Ну и вариант пропатчить Shell32.dll своими иконками, взяв из той же Win10 Смысла мне патчить семёрку нету, поскоку усё равно собираюсь преходить на десятку. Давно пора уже поменять мордочку рабочей операционки. Десятка отзывчивее и по функционалу немного интереснее чем семёрка Да и некоторые программы уже тока на десятке работают (например, vst от Waves) Правда собираюсь я это сделать уже полтора года
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Сама идея с иконками интересна ради спортивного интереса, так как ранее я уже использовал это в других программах на AutoIt3 и было интересно воспроизвести на PureBasic. В ранее указанной теме мне дали пример с использованием функции SHGetFileInfo но без необходимости указывать точные пути на файл и работает это быстро, как я выше говорил, так как использует кеш (уверенное предположение). Даже специально сделал тестовую версию кеширования в коде на PureBasic и тестовую версию без кеширования и в результате без кеширования отработала чуть быстрее, так как эта версия не создавала бесполезный кеш в коде на PureBasic, так как кеш уже был создан средствами винды при вызове SHGetFileInfo. Так как с иконками работает медленно, то можно сделать ограничение, например если число элементов менее 10000, то можно задействовать показ иконок. Грубо говоря, если выполнение кода занимает менее пол-секунды, то показывает иконки (можно даже это число вынести в настройки для уменьшения значения для слабых компов). Тестовый пример (без файлов, чисто построение дерева) показывает, что 48000 значков заполняются за 2,5 сек.Я не смог разобраться - как через ini файл включать и отключать использование чекбосов я специально указал "было бы", чтобы нельзя было интерпретировать иначе, то есть этого ещё нет.Например, в одной папке иконки файлов exe показываются, а в другой папке нет - и закономерность мне отследить не удалось Я в тестовых примерах давно исправил это, проблема если файл иконок не найден, то не происходит переназначение иконки и по умолчанию используется предыдущая, а предыдущая каждый раз разная. На счёт падения программы, выяснил, что при 37000 файлов на некоторой реальной папке мой старый код с иконками не падает (но возможно при больших значениях падает, как было отписано ранее), а новый с SHGetFileInfo падает на этой папке с 37000 файлов, а в тестовом примере падает при 48000 элементов, то есть есть какая-то зависимость на объём выделенный для построения списка. При этом без иконок отрабатывает на много больше 100 тыс., дальше не проверял.Там и нормальная иконка в контекстном меню "Открыть в программе" я могу встроить свои ранее использованные иконки или смесь, часть из виндовых, а те что корявые из своих, получим приемлемое.
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Обновил. Добавлены чекбоксы, в ini-файле cb = 1 Чтобы удалять вместе с пунктом в дереве - в ini-файле idel = 1 Чтобы показать иконки - в ini-файле ico = 500, не более 3000, при 3000 вместо 0,8 сек построение списка 2,8 сек, в 4 раза медленней, причём при больших значениях начинаются глюки списка. Может сделаю 3000 как максималку с невозможностью увеличить болше. Добавлен пункт "Сначть все галки", значок пока не сделал этому пункту. Ещё обновил, добавил поддержку мультиязычности через внешний файл.
|
Отправлено: 11-Ноя-2021 16:04
(спустя 1 час 21 минута)
rezorustavi
- Стаж: 8 лет 10 месяцев
- Сообщений: 918
- Репутация:55[+] [-]
- Откуда: Грузия, город Рустави
|
|
Отправлено: 11-Ноя-2021 18:04
(спустя 1 час 59 минут)
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
И не плохо бы вернуть "Удалить отмеченные": в ini-файле cb = 1Отображение стрелок ярлыков у меня отключены с помощью Winaero Tweaker. отключено видимо в реестре_x64
Последний раз редактировалось: AZJIO (2021-11-11 18:07), всего редактировалось 1 раз
|
rezorustavi
- Стаж: 8 лет 10 месяцев
- Сообщений: 918
- Репутация:55[+] [-]
- Откуда: Грузия, город Рустави
|
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
rekshd Без нарушения лицензии вот пример как изменить иконкиWindows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons] "3"="C:\\Windows\\folder3.ico" "4"="C:\\Windows\\folder4.ico" в данном примере для иконки 3 и 4 указан путь к иконке, которая будет использоваться взамен иконки с тем же номером в Shell32.dll
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Обновил. Для иконки файлов сделал встроенную, а не из Shel32.dll. Вроде все запросы учтены. Копирование скорее всего не буду делать так как это проще сделать через эксплорер. Я ещё понимаю удаление, т.е. подчистить ненужное расставив галки и скопом удалить, но копирование - не вижу в этом смысла, с тем же успехом открыть эксплорер и перекидывать слева направо папки, размер в данном случае совершенно не критерий. Можно ещё улучшить в плане вместо "* Удалено" сделать "* Удалено имя_файла", то есть оставить понятную строку что было удалено.
|
dimo70
- Стаж: 6 лет 11 месяцев
- Сообщений: 3777
- Репутация:27[+] [-]
- Откуда: BG
|
89708 Можно ещё улучшить в плане вместо "* Удалено" сделать "* Удалено имя_файла", то есть оставить понятную строку что было удалено. Вроде не нужно такое.
_________________ Подпись отключена за нарушение правил форума
|
rekshd
- Стаж: 5 лет 10 месяцев
- Сообщений: 331
- Репутация:7[+] [-]
|
89708Обновил. Для иконки файлов сделал встроенную, а не из Shel32.dll. Вроде все запросы учтены. Копирование скорее всего не буду делать так как это проще сделать через эксплорер. Я ещё понимаю удаление, т.е. подчистить ненужное расставив галки и скопом удалить, но копирование - не вижу в этом смысла, с тем же успехом открыть эксплорер и перекидывать слева направо папки, размер в данном случае совершенно не критерий. Можно ещё улучшить в плане вместо "* Удалено" сделать "* Удалено имя_файла", то есть оставить понятную строку что было удалено. Натравил на папку с 100 гигами мелких файлов и 3000 вложенных папок из которых около 100-150 корневых папок имеют свои уникальные иконки. Усё это богатство лежит на HDD. Пересчёт и вывод окна занял несколько секунд (при отмене показа иконок в FileSizesList - ico = 0) Программа работает безубречно в таком контексте. Отличная работа Конечно жаль, что визуальной привязки к иконкам нет на W7. Ну и ладно. Без них обойдусь. Я выставил ico = 0 поскоку и в финальной версии программы при ico = 500 в W7 отображаются тока часть иконок Если когда-нибудь догадайтесь, как сделать в программе отображение иконок как в Explorer, то программа будет вообще супер идеальна. Ну или я сам освою PB и догадаюсь как это сделать. Правда до освоения PureBasic никак у меня руки не доходят. Уже год как собираюсь ... Естественно, если получится отображение иконок сделать, то результатом поделюсь в этой ветке PS А c копированием из окна программы - мне кажется это лишнее ...
|
UserX
- Стаж: 9 лет 7 месяцев
- Сообщений: 852
- Репутация:37[+] [-]
|
89711Уже год как собираюсь ... Просто в году завтрашних дней - аж 365... :)
|
AZJIO
- Стаж: 6 лет 8 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
в W7 отображаются тока часть иконок покажи скрин, мне интересно что не отображается, может на Win7 эта функция работает по-другому. И не исключаю, что могу попробовать улучшить свою старую версию получения иконок через запрос иконки в реестре и сравнить потом скорость по времени и ограничения по количеству.Если когда-нибудь догадайтесь, как сделать в программе отображение иконок как в Explorer, то программа будет вообще супер идеальна. А что там догадываться? В папке лежит desktop.ini, который определяет значок папки. Эти все обработки требуют время. Эксплорер не вычисляет размер папок, он вычисляет их отображение только для текущей, которую открыл и поэтому он не тормозит, а заставь его обсчитать 100 гиг мелких файлов или делать это каждый раз при запуске и будешь плеваться в него и заменишь его другим. Вот у меня иконки отображаются точно
|
rekshd
- Стаж: 5 лет 10 месяцев
- Сообщений: 331
- Репутация:7[+] [-]
|
Если когда-нибудь догадайтесь, как сделать в программе отображение иконок как в Explorer, то программа будет вообще супер идеальна. А что там догадываться? В папке лежит desktop.ini, который определяет значок папки. Эти все обработки требуют время. Эксплорер не вычисляет размер папок, он вычисляет их отображение только для текущей, которую открыл и поэтому он не тормозит, а заставь его обсчитать 100 гиг мелких файлов или делать это каждый раз при запуске и будешь плеваться в него и заменишь его другим. Ну да, у меня в этой 100гиговой папке 111 корневых папок и каждая имеет свой уникальный значок (сделано для каждой папки через сладкую парочку - файлами desktop.ini и Icon.ico) Дак вот - сам эксплорер при первом открытии этой папки в течении сессии слегка зависает - отображение папки занимает пару-тройку секунд. Как я понимаю это заполняется кэш иконок. В следующие разы эти папки уже отображаются моментально. Иконки мне нужны, чтоб моментально найти нужную папку - я визуал ... Само собой, если сделать отображение таких иконок в FileSizesList, то загрузка займёт не меньшее время, чем непосредственно в проводнике. А насчёт файлов - минут через 5 сделаю скрин - нужно комп перегрузить
|
Страница 3 из 8
Текущее время: 21-Ноя 13:50
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|