Saya memiliki folder dengan foto-foto lama yang saya kumpulkan dalam nol. Saya mentransfer dari komputer ke komputer bersama dengan semua file saya dengan setiap upgrade, kadang-kadang saya menjadi nostalgia. Tetapi setiap kali saya merasa sedikit malu bahwa penampil Windows 7 standar tidak menunjukkan animasi GIF, meskipun memori mengatakan kepada saya bahwa pada hari-hari XP, animasi menunjukkan tanpa masalah. Dengan serangan nostalgia berikutnya, saya masih memutuskan untuk meluncurkan penampil dari XP pada Windows 7. Setelah mengatasi sejumlah kendala, saya sekarang yakin bahwa animasi GIF benar-benar didukung di sana! Dan yang paling penting - sekarang saya dapat menonton folder lama saya dengan gambar-gambar di antarmuka asli penampil gambar Windows XP, yang menciptakan suasana yang lebih cocok =)
Unduh: shimgvw_xp32.7z (termasuk kode sumber dan biner dari peluncur, plus shimgvw.dll dari Windows XP SP3 berbahasa Inggris).
Bagaimana ini dilakukan?
Penampil gambar standar pada Windows XP bukan aplikasi biasa. Itu terletak di perpustakaan shimgvw.dll, dan Anda tidak dapat menjalankannya secara langsung - Anda memerlukan setidaknya
rundll32 (diperlukan jalur ke file gambar yang ada):
rundll32 c:\windows\system32\shimgvw.dll,ImageView_Fullscreen c:\test.gif
Tetapi trik ini tidak berfungsi ketika mencoba menjalankan shimgvw.dll dari Windows XP pada Windows 7 dan yang lebih baru - shimgvw.dll tidak dapat memuat, perlu mode kompatibilitas Windows XP agar berfungsi dengan benar. Ini dapat dicapai dengan mengatur mode kompatibilitas yang sesuai untuk salinan rundll32, tetapi kompatibilitas dengan XP menyiratkan peningkatan izin aplikasi secara maksimal, yang menyebabkan dialog UAC muncul di setiap awal, yang ingin saya hindari.
Sebuah tarian kecil dengan debugger memungkinkan untuk mengetahui alasannya - selama proses boot, shimgvw.dll kemudian mencoba untuk mengimpor beberapa fungsi dari shunimpl.dll, di mana fungsi shell yang usang disimpan, dan yang terakhir menolak untuk memuat secara default jika ATOM "FailObsoleteShellAPIs" tidak ada (kehadiran ATOM ini memungkinkan memuat perpustakaan) , tetapi kemudian semua fungsi yang usang hanya mengembalikan kode kesalahan). Mode kompatibilitas XP, antara lain, mengatur ATOM ini, sehingga pengunjung dapat memulai.
Diputuskan untuk menulis loader kecil yang menambahkan ATOM "FailObsoleteShellAPIs", menanyakan gambar mana yang akan dibuka (jika jalur tidak ditentukan dalam parameter), dan kemudian mentransfer kontrol ke shimgvw.dll. Penampil berfungsi dengan baik (mis., Tugas awal selesai), jadi saya tidak menyelidiki fungsi usang apa yang diimpor dari shunimpl.dll dan dalam kasus apa mereka digunakan - tampaknya, mereka tidak melakukan hal penting bagi penampil agar berfungsi.
Karena untuk mengimplementasikan loader, Anda tidak memerlukan apa pun selain sejumlah kecil fungsi WinAPI, saya memutuskan sebagai percobaan untuk membangun proyek menggunakan Dentang tanpa menggunakan runtime (sebelumnya saya selalu menggunakan MSVC untuk tarian semacam itu). Dengan demikian, file executable berukuran 14 kilobyte diperoleh, dimana 9 kilobyte pergi ke ikon. Jika seseorang juga suka membuat gadget tanpa ketergantungan pada pustaka non-standar, proyek ini dapat berfungsi sebagai contoh kecil bagaimana hal ini dilakukan dengan menggunakan Dentang.