У меня есть папка со старыми фотографиями, которые я собирал в 2000-х годах.
Я переношу его с компьютера на компьютер вместе со всеми своими файлами при каждом обновлении, и иногда меня охватывает ностальгия.
Но каждый раз меня немного смущало то, что стандартный просмотрщик Windows 7 не показывал GIF-анимацию, хотя память мне подсказывала, что во времена XP анимация показывалась без проблем.
С очередным приступом ностальгии я решил запустить просмотрщик из XP на Windows 7. Преодолев ряд препятствий, я теперь уверен, что GIF-анимация там действительно поддерживалась! И самое главное, теперь я могу просматривать свою старую папку с картинками в аутентичном интерфейсе просмотра изображений Windows XP, что создает более подходящую атмосферу =)
Скачать: shimgvw_xp32.7z (включает двоичный код и исходный код программы запуска, а также shimgvw.dll из английской версии Windows XP SP3).
Как это было сделано?
Стандартная программа просмотра изображений в Windows XP – это не обычное приложение.Он находится в библиотеке shimgvw.dll, и запустить его напрямую нельзя — нужно как минимум рундлл32 (указание пути к существующему файлу образа обязательно):
Но этот трюк не работает при попытке запустить shimgvw.dll из Windows XP на Windows 7 и новее — shimgvw.dll не загружается, для корректной работы ему необходим режим совместимости с Windows XP. Этого можно добиться установкой соответствующего режима совместимости для копии rundll32, но совместимость с XP подразумевает поднятие прав приложения до максимума, из-за чего при каждом его запуске появляется диалог UAC, чего хотелось бы избежать.rundll32 c:\windows\system32\shimgvw.dll,ImageView_Fullscreen c:\test.gif
Небольшой танец с отладчиком позволил нам выяснить причину — в процессе загрузки shimgvw.dll впоследствии пытается импортировать несколько функций из shunimpl.dll, где хранятся устаревшие функции оболочки, а последняя по умолчанию отказывается загружаться, если ATOM «FailObsoleteShellAPIs» отсутствует (наличие этого ATOM позволяет загружать библиотеку, но тогда все устаревшие функции просто возвращают код с ошибкой).
Режим совместимости с XP, кроме всего прочего, устанавливает этот АТОМ, из-за чего и запускается просмотрщик.
Было решено написать небольшой загрузчик, который добавляет в ATOM «FailObsoleteShellAPIs», спрашивает, какой образ открыть (если путь не был передан в параметрах), а затем передает управление shimgvw.dll. Просмотрщик работает нормально (то есть исходная задача была выполнена), поэтому я не исследовал, какие устаревшие функции импортируются из shunimpl.dll и в каких случаях они используются - судя по всему, они не делают ничего критического для просмотра просмотрщика.
операция.
Поскольку для реализации загрузчика не нужно ничего, кроме небольшого количества WinAPI-функций, я решил в качестве эксперимента собрать проект с помощью Clang без использования рантайма (раньше для таких танцев я всегда использовал MSVC).
Таким образом, в результате получился исполняемый файл размером 14 килобайт, из которых 9 килобайт ушло на иконку.
Если кто-то тоже любит делать мини-приложения без зависимостей от нестандартных библиотек, этот проект может послужить небольшим примером того, как это делается с помощью Clang. Теги: #Разработка для Windows #Системное программирование #Windows XP #старое программное обеспечение
-
Oecomplete – Менеджер Личной Информации
19 Oct, 24 -
Дата-Центр Для Майнинга
19 Oct, 24 -
Adobe Air Alpha 1 Для Linux
19 Oct, 24 -
Выпадать. Философия Приключений
19 Oct, 24 -
Потеряли Работу – Приобретите Flex Builder
19 Oct, 24