最新のWindowsでWindows XPから画像ビューアーを起動する

ゼロで収集した古い写真のあるフォルダーがあります。 アップグレードのたびにすべてのファイルを使用してコンピューターからコンピューターに転送しますが、時々懐かしくなります。 しかし、XPの時代にはアニメーションは問題なく表示されると記憶に残っていましたが、標準のWindows 7ビューアでGIFアニメーションが表示されないことに少し戸惑っていました。 ノスタルジアの次の攻撃で、私はまだWindows 7でXPからビューアを起動することにしました。多くの障害を克服した後、GIFアニメーションが本当にサポートされたと確信しています。 そして最も重要なこと-今、私はWindows XPの画像ビューアの本物のインターフェースで写真付きの古いフォルダを見ることができ、より適切な雰囲気を作り出します=)









ダウンロード: shimgvw_xp32.7z (ランチャーのバイナリとソースコードに加えて、英語版Windows XP SP3のshimgvw.dllが含まれています)。



これはどのように行われましたか?



Windows XPの標準の画像ビューアは、通常のアプリケーションではありません。 shimgvw.dllライブラリにあり、直接実行することはできません-少なくともrundll32が必要です (既存の画像ファイルへのパスが必要です):



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





しかし、Windows 7以降でWindows XPからshimgvw.dllを実行しようとすると、このトリックは機能しません。shimgvw.dllをロードできません。WindowsXPとの互換性モードが必要です。 これは、rundll32コピーに適切な互換モードを設定することで実現できますが、XPとの互換性は、アプリケーションのアクセス許可を最大に引き上げることを意味します。これにより、起動時にUACダイアログが表示されます。



デバッガーとのちょっとしたダンスが原因を突き止めました-起動プロセス中に、shimgvw.dllはその後、廃止されたシェル関数が保存されているshunimpl.dllからいくつかの関数をインポートしようとします。 、しかしすべての廃止された関数はエラーコードを返すだけです)。 XP互換モードは、とりわけこのATOMを設定するため、ビューアが起動します。



ATOM“ FailObsoleteShellAPIs”を追加し、どのイメージを開くかを尋ねる(パラメーターでパスが指定されていない場合)後、制御をshimgvw.dllに転送する小さなローダーを作成することにしました。 ビューアーは正常に動作しています(つまり、最初のタスクが完了しました)。したがって、shunimpl.dllからインポートされた古い関数や、どのような場合に使用されるかについては調査しませんでした。明らかに、ビューアーが動作するために重要なことは何もしません。



ローダーを実装するために少数のWinAPI関数以外は必要ないため、ランタイムを使用せずにClangを使用してプロジェクトをビルドする実験として決定しました(以前はこのようなダンスには常にMSVCを使用していました)。 したがって、14キロバイトの実行可能ファイルが取得され、そのうち9キロバイトがアイコンに移動しました。 誰かが非標準ライブラリに依存せずにガジェットを作成することを好む場合、このプロジェクトはClangを使用してこれを行う方法の簡単な例として役立ちます。



All Articles