2011-01-11 10 views
2

私はPythonでスクリーンショットツールを書いてみたいです。今、私は自分のやり方を勉強しています。 hereのようなwin32 apiを使用してスクリーンショットを作成するスクリプトがありますが、スクリーンショットにマウスポインタを含めたいとします。現在のマウスポインタのビットマップを作成するには?

win32gui.GetCursorInfo()では、その状態(表示/非表示)、そのハンドルとその位置を取得します。私の目標は、ハンドルを使用してカーソルの実際のビットマップにアクセスし、それをコピーし、スクリーンショットの右の座標に追加することです。しかし、私はそれを取得した後、私はそのハンドルで何ができるのかを言う医者を見つけることができないようです。

私は、スクリーンショット自体のようにする必要があるかもしれないと思っています。すなわち、カーソルのDCを取得し、それと互換性のあるビットマップを作成し、BitBltでコピーします。正しい軌道にいるのですか?

答えて

3

のpythonのWin32 APIをDrawIconExが含まれています:

http://msdn.microsoft.com/en-us/library/ms648065%28v=vs.85%29.aspx

あなたはそれを書くために描画可能なコンテキストを作成し、そのカーソルハンドルを渡す必要があります...

(またはプレーンDrawIcon)

+0

それは:)。私はそれを確認しています、ありがとう。 – NorthernLights

+0

ええと、 "TypeError:オブジェクトがPyHANDLEオブジェクトではありません"が、win32gui.GetCursor()によって返されたハンドルにスローされます。 – NorthernLights

+0

エラーはwin32gui.DrawIcon()でのみ発生しました。 pyCDC.DrawIcon()はエラーをスローしません。魅力のように働き、長さはわずか2行です。ありがとう! – NorthernLights

0

Antherオプションは実際にはPython Imaging Library(PIL) を使用して、ビットマップを簡単に編集できます。 (実際のWin32 APIを使用して、その後ずっと簡単。)

あなたがImageGrabを使用することができ、かつImageDraw

+0

ありがとうございます。しかし、私はPILを避けています。なぜなら、それはマルチスクリーンのスクリーンショットを作ることができないからです。 – NorthernLights

0

あなたはGetCursorInfoからカーソルのアイコンのハンドルを取得したら、あなたは私は、Win32を推定DrawIconまたはDrawIconEx、とそれを描くことができますサポートしているAPIモジュールアイコンをレンダリングするには、スクリーンショットビットマップのDCを作成する必要がありますが、カーソルアイコン自体のDCを作成する必要はないと思います。DrawIconで十分です。

関連する問題