Запуск Средства Просмотра Изображений Из Windows Xp В Современной Windows

У меня есть папка со старыми фотографиями, которые я собирал в 2000-х годах.

Я переношу его с компьютера на компьютер вместе со всеми своими файлами при каждом обновлении, и иногда меня охватывает ностальгия.

Но каждый раз меня немного смущало то, что стандартный просмотрщик Windows 7 не показывал GIF-анимацию, хотя память мне подсказывала, что во времена XP анимация показывалась без проблем.

С очередным приступом ностальгии я решил запустить просмотрщик из XP на Windows 7. Преодолев ряд препятствий, я теперь уверен, что GIF-анимация там действительно поддерживалась! И самое главное, теперь я могу просматривать свою старую папку с картинками в аутентичном интерфейсе просмотра изображений Windows XP, что создает более подходящую атмосферу =)

Запуск средства просмотра изображений из Windows XP в современной Windows

Скачать: shimgvw_xp32.7z (включает двоичный код и исходный код программы запуска, а также shimgvw.dll из английской версии Windows XP SP3).



Как это было сделано?

Стандартная программа просмотра изображений в Windows XP – это не обычное приложение.

Он находится в библиотеке shimgvw.dll, и запустить его напрямую нельзя — нужно как минимум рундлл32 (указание пути к существующему файлу образа обязательно):

   

rundll32 c:\windows\system32\shimgvw.dll,ImageView_Fullscreen c:\test.gif

Но этот трюк не работает при попытке запустить shimgvw.dll из Windows XP на Windows 7 и новее — shimgvw.dll не загружается, для корректной работы ему необходим режим совместимости с Windows XP. Этого можно добиться установкой соответствующего режима совместимости для копии rundll32, но совместимость с XP подразумевает поднятие прав приложения до максимума, из-за чего при каждом его запуске появляется диалог UAC, чего хотелось бы избежать.

Небольшой танец с отладчиком позволил нам выяснить причину — в процессе загрузки shimgvw.dll впоследствии пытается импортировать несколько функций из shunimpl.dll, где хранятся устаревшие функции оболочки, а последняя по умолчанию отказывается загружаться, если ATOM «FailObsoleteShellAPIs» отсутствует (наличие этого ATOM позволяет загружать библиотеку, но тогда все устаревшие функции просто возвращают код с ошибкой).

Режим совместимости с XP, кроме всего прочего, устанавливает этот АТОМ, из-за чего и запускается просмотрщик.

Было решено написать небольшой загрузчик, который добавляет в ATOM «FailObsoleteShellAPIs», спрашивает, какой образ открыть (если путь не был передан в параметрах), а затем передает управление shimgvw.dll. Просмотрщик работает нормально (то есть исходная задача была выполнена), поэтому я не исследовал, какие устаревшие функции импортируются из shunimpl.dll и в каких случаях они используются - судя по всему, они не делают ничего критического для просмотра просмотрщика.

операция.

Поскольку для реализации загрузчика не нужно ничего, кроме небольшого количества WinAPI-функций, я решил в качестве эксперимента собрать проект с помощью Clang без использования рантайма (раньше для таких танцев я всегда использовал MSVC).

Таким образом, в результате получился исполняемый файл размером 14 килобайт, из которых 9 килобайт ушло на иконку.

Если кто-то тоже любит делать мини-приложения без зависимостей от нестандартных библиотек, этот проект может послужить небольшим примером того, как это делается с помощью Clang. Теги: #Разработка для Windows #Системное программирование #Windows XP #старое программное обеспечение

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.