potisanのプログラミングメモ

趣味のプログラマーがプログラミング関係で気になったことや調べたことをいつでも忘れられるようにメモするブログです。はてなブログ無料版なので記事の上の方はたぶん広告です。記事中にも広告挿入されるみたいです。

Python 3 WindowsアニメーションカーソルのRIFFヘッダー構造を解析する

Windowsアニメーションカーソル(.ani)のRIFFヘッダー構造を解析するサンプルコードです。実行するとシグネチャとチャンクのデータサイズ、RIFFまたはLISTの場合はフォーム/リストタイプを出力します。

RIFFファイルやaniファイルの構造はソース中コメントのURLを参考にしています。

#参考
#https://ja.wikipedia.org/wiki/ANI_(%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88)
#https://www.gdgsoft.com/anituner/help/aniformat.htm
from os import SEEK_CUR

with open(r"C:\Windows\Cursors\aero_busy.ani", "rb") as f:
    while True:
        signature = f.read(4).decode("ascii")
        if len(signature) == 0:
            break
        dataSize = int.from_bytes(f.read(4), byteorder="little", signed=False)
        if signature in ("RIFF", "LIST"):
            formType = f.read(4).decode("ascii")
        else:
            formType = None
            f.seek(dataSize, SEEK_CUR)
        print((signature, dataSize, formType))