Vistaの画面キャプチャ
http://d.hatena.ne.jp/ryocotan/20071026
真っ黒い画面がキャプチャされる
Vistaでの画面キャプチャ
GetDC(GetDesktopWindow())
BitBlt(..)
ReleaseDC(..)
しかし、VistaのAero環境ではこれが使えませんでした。
私が知っているキャプチャの方法としては
GDI経由
- BitBlt()
- ミラードライバを作成する(参考: FAQ アプリケーション共有について)
Direct3D経由
- D3DXSaveSurfaceToFile()
- GetBackBuffer()、D3DXLoadSurfaceFromSurface()とかでがんばる
2000とXPのドライバはほぼ一緒で、今はXPDM(Windows XP Display Driver Model)と呼んでいる。VistaのドライバはWDDM(Windows Display Driver Model)。
XPだとDirect3Dの描画が例外扱い、VistaだとDirect3DがネイティブでGDIの描画がエミュレーションということらしい。
でもって自分が関知しないもの(オーバーレイとか)をキャプチャすると真っ黒(単色)になる。たぶんHDCPで保護されているコンテンツも真っ黒になるんじゃないかと思うけど試してない。
以下推測。
XPだと少なくともGDIの領域はローカルに持っていそうだけど、Vistaだとビデオ側にしか持ってない。GeForce7300はTurboCacheとか積んでて、Windowsがどこを参照したらいいかわからないからキャプチャできない。と思ったけどVistaではTurboCacheは有効になってないっぽい。