kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

画面キャプチャする

VBAでは画面キャプチャも出来てしまうんですね。メモしておきます。

Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare Sub keybd_event Lib "User32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)

Private Const KEYEVENTF_EXTENDEDKEY As Long = &H1
Private Const KEYEVENTF_KEYUP As Long = &H2
Private Const VK_LMENU As Long = &HA4
Private Const fKEYDOWN = KEYEVENTF_EXTENDEDKEY
Private Const fKEYUP = KEYEVENTF_EXTENDEDKEY Or KEYEVENTF_KEYUP

' 画面キャプチャします。
Public Sub U_Capture()
    ' Alt+PrintScreenキーを押す
    keybd_event VK_LMENU, 0&, fKEYDOWN, 0& 'Altキーを押す
    keybd_event vbKeySnapshot, 0&, fKEYDOWN, 0& 'PrintScreenキーを押す
    Sleep 10
    keybd_event vbKeySnapshot, 0&, fKEYUP, 0& 'PrintScreenキーを離す
    keybd_event VK_LMENU, 0&, fKEYUP, 0& 'Altキーを離す
End Sub

スリープを使っているのは、正しいやり方かわかりませんが、時々キャプチャに失敗するのを防ぐためです。

もう少し欲を言えば、キャプチャ対象の画面をスクロールしながらキャプチャできると嬉しいのですが、どうやるのでしょう?