4

アプリケーションが他の Windows アプリケーションのスクリーンショットを取得する必要があるときに、問題に直面しています。

win32apiの「PrintWindow」の関数を使っているのですが、うまくいきません。速度が遅く、他のアプリケーションのウィンドウ内の一部のコンポーネントが黒い四角形で表示されます。

Devrexster の DExpose2 というアプリケーション (Mac OS スタイルのタスク スイッチャー) があります。他のアプリケーションのスクリーンショットを非常に高速に取得できます。これらのスクリーンショットを継続的に取得することもできます.

私が使用しているGDIを使用する代わりに、Direct3Dを使用してアプリケーションのスクリーンショットを取得していると思います。この目的で Direct3D を使用することは可能ですか? 可能であれば、どれが最もきちんとした方法であるべきですか?

4

2 に答える 2

3

Vista +の答えは、DirectXのバッファをスヌープするという別の答えにあります。

DExpose2はおそらくスクリーンショットを「取得」しません。つまり、ビデオカードからRAMに転送されません。これは遅い操作であり、その後にビデオカードに別の遅いコピーを戻す必要があります。PCI-eバスを横切るピクセルやテクセルがなく、ビデオカード側でいくつかのスケールと移動変換を適用するだけだと思います。

于 2013-01-03T09:24:55.373 に答える
2

bitblt を使用してスクリーンショットを取得できます。デスクトップ全体で取得する例を次に示します。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd183402(v=vs.85).aspx

関心のあるウィンドウだけに対応するサブセットが得られるように、おそらく X、Y、およびサイズのパラメーターを調整する必要があります。

于 2013-01-03T05:07:05.953 に答える