- Task Я намагаюся налаштувати значок папки з мого програми, але через те, як Windows кешируєт значки...
- питання
Task
Я намагаюся налаштувати значок папки з мого програми, але через те, як Windows кешируєт значки та мініатюри, я щосили намагаюся отримати змінену папку, щоб оновити її новий значок.
У Windows є два способи, якими я знаю налаштувати піктограму папок, найпростіший спосіб - натиснути правою кнопкою миші папку з Провідника Windows, Властивості, а потім вибрати вкладку "Налаштувати" і змінити її значок, цей метод не годиться, але ж це вимагає ручного зміни властивостей папки.
Другий спосіб, який я роблю з моєї програми, - створити файл desktop.ini і помістити його в папку, що вимагає зміни значка, документацію на desktop.ini можна знайти тут: http://hwiegman.home.xs4all.nl/desktopini.html і статтю тут: http://helpdeskgeek.com/how-to/customize-folder-icons-desktop-ini/
Як показано нижче, значок папки в Windows не оновлюється, хоча ви можете бачити з властивостей папки, що значок змінився, просто Windows не вказує значок оновленої папки:
Я повністю обізнаний про значки і ескізах кешування Windows, я шукав і читав кілька сторінок про те, як нібито перебудувати кеш іконки і, таким чином, змусити Windows відображати недавно змінений значок, а не кешувати, однак я не можу змусити це працювати з мого програми без перезапуску Windows або процесу Explorer.exe, це необхідно зробити, не перериваючи Windows, хоча закриття Explorer.exe або необхідність перезапуску абсолютно не є варіантом.
Цікаво, однак, що при зміні значка папки з першого погляду, описаного мною раніше, Windows якимось чином вдається очистити і перебудувати кеш значків, так як змінена папка швидко оновлена, щоб показати новий значок, проте я не бачу, які трюки Windows роблять для досягнення цього.
спроби
Кілька речей, які я спробував невдачливе (в певному порядку):
- Виконання наступного: ie4uinit.exe -ClearIconCache
- Запуск цього коду в Lazarus: SHChangeNotify (SHCNE_ASSOCCHANGED, SHCNF_IDLIST, nil, nil);
- Видалення файлу IconCache.db з AppData \ Local
- Перемикання параметра "Always show icons, never thumbnails" Explorer з реєстру, розташованого тут: HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ Windows \ CurrentVersion \ Explorer \ Advanced, який зберігається в значенні IconsOnly
- Зміна розміру значка з реєстру і назад, розташованого тут: HKEY_CURRENT_USER \ Control Panel \ Desktop \ WindowMetrics, який зберігається в значенні Shell Icon Size
- Це посилання дає очевидне рішення в Delphi, яке я не зміг перетворити в Lazarus: http://www.aha-soft.com/faq/q18.htm
- Мені відомо про кешованих файлах db тут: AppData \ Local \ Microsoft \ Windows \ Explorer, хоча я не впевнений, що вони можуть допомогти, спроба видалити деякі з них є неможливою, оскільки вони можуть бути заблоковані і т.д.
- Перейменування папки, а потім перейменування на оригінальне ім'я.
- Клацніть правою кнопкою миші пусте місце в провіднику Windows і виберіть "Оновити", схоже, не оновлює значок папки.
Також спробували виконати деякі з перерахованих вище в поєднанні з удачею.
питання
При зміні значка папки безпосередньо з Провідника Windows, використовуючи контекстне меню властивостей і вкладку налаштування, при застосуванні і закриття цього діалогового вікна значок папки змінюється практично відразу, не відбувається закриття explorer.exe або перезапуску Windows, відбувається зміна дуже скоро.
Як я можу домогтися цього з свого застосування програмно так само, як це робить Windows Explorer? Чи є спосіб дізнатися, як це робить Windows Explorer?
Моя операційна система - це Windows 10, яка може пояснити, чому деякі зі старих методів не працюють для мене.
Як я можу домогтися цього з свого застосування програмно так само, як це робить Windows Explorer?Чи є спосіб дізнатися, як це робить Windows Explorer?