クリップボードを使わずにアクティブウィンドウをキャプチャしたいのですが、
下記の様にすればウマクいきます。
しかし、Screen.TwipsPerPixelX * 4とScreen.TwipsPerPixelY * 4を
増分してピクチャボックスを移動しないと、少し小さめの画像しかキャプチャ
出来ないのです。原因がわかりません。又、この方法で正しいのでしょうか?
Call GetWindowRect(g_lng_WH, g_udt_RECT)
If SetForegroundWindow(g_lngWH) = 1 Then '最前面表示成功なら
If IsIconic(g_lng_WH) = 0 Then '非アイコン表示なら
Picture1.Move _
g_udt_RECT.Left * Screen.TwipsPerPixelX, _
g_udt_RECT.Top * Screen.TwipsPerPixelY, _
(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + Screen.TwipsPerPixelX * 4, _
(g_udt_RECT.Bottom - g_udt_RECT.Top) * Screen.TwipsPerPixelY + Screen.TwipsPerPixelY * 4
BitBlt Picture1.hDC, _
0, _
0, _
(g_udt_RECT.Right - g_udt_RECT.Left), _
(g_udt_RECT.Bottom - g_udt_RECT.Top), _
GetWindowDC(g_lngWH), _
0, _
0, vbSrcCopy
Picture1.Refresh '強制更新
End If
End If
ん?単に border の問題か?きになるんだったら、
(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (, _
あ、ごめん、
(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (Picture1.Width - Picture1.ScaleWidth)
とかすれば?
うお!できました!
(g_udt_RECT.Right - g_udt_RECT.Left) * Screen.TwipsPerPixelX + (Picture1.Width - Picture1.ScaleWidth), _
(g_udt_RECT.Bottom - g_udt_RECT.Top) * Screen.TwipsPerPixelY + (Picture1.Height - Picture1.ScaleHeight)
Picture1.BorderStyle = 0 でもOKですね。
後、Picture1.Refresh だと、前にキャプチャした画像が残ってしいます。
Picture1.Cls でクリアしたほうが良いようです。ありがとうございました。
忘れてた。
編集 削除