Windows のデバイスコンテキストをビットマップファイルに変換する。Python で

Win32API が直に扱える環境なら CreateDIBSection とか使えばいいしまともなライブラリのある言語ならビットマップクラスで扱える範疇だろう。
が、pywin32 では CreateDIBSection は定義されていないし、ctypes でインポートするのも何だし、wxPython でごにょごにょしてもできないし、win32ui で MFC が使えると聞いてひどい目にあった結果。
HDC context の取得と、その幅と高さは用意してあるとして、

import win32ui, win32con
def savedc(context, width, height):

    context = win32ui.CreateDCFromHandle(context)
    duplicate = context.CreateCompatibleDC(context)

    surface = win32ui.CreateBitmap()
    surface.CreateCompatibleBitmap(context, width, height)
    old_surface = duplicate.SelectObject(surface)

    duplicate.BitBlt((0, 0, ), (width, height, ), context, (0, 0, ), win32con.SRCCOPY)

    surface.SaveBitmapFile(duplicate, "mybitmap.bmp")

    duplicate.SelectObject(old_surface)

    # MFC のオブジェクトはデストラクタで後処理してくれるんだよな ?

最後に win32gui.DeleteObject(context) しておいて欲しい。