画面をキャプチャする方法

◆概要

このページは、Visual Basic 6.0のVisual Basicで、画面をキャプチャする方法について記載しています。


◆フォームに画面をキャプチャする方法

Windwos APIのBitBlt関数を利用します。

標準モジュール

Option Explicit

''画面全体のコピーを取得するためのAPIを宣言します。
Public Declare Function BitBlt _
Lib "gdi32" ( _
ByVal hDestDC As Long, _
ByVal x As Long, ByVal Y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hSrcDC As Long, _
ByVal XSRc As Long, ByVal YSrc As Long, _
ByVal dwRop As Long _
) As Long

'画面へのハンドルを取得するためのAPIを宣言します
Public Declare Function GetDesktopWindow _
Lib "user32" () As Long

'ハンドルをデバイスコンテキストに変換するためのAPIを宣言します
Public Declare Function GetDC _
Lib "user32" ( _
ByVal hwnd As Long _
) As Long

'デバイスコンテキストを開放するためのAPIを宣言します
Public Declare Function ReleaseDC _
Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hdc As Long _
) As Long
  

フォームモジュール

Private Sub Form_Load()
    Dim dwRop As Long, hwndSrc As Long, hSrcDC As Long
    Dim Res As Long

    'フォームの設定
    ScaleMode = vbPixels
    AutoRedraw = True
    Me.WindowState = 2
    
    'デスクトップ画面全体をフォームにコピーします
    dwRop = &HCC0020
    hwndSrc = GetDesktopWindow()
    hSrcDC = GetDC(hwndSrc)
    
    Res = BitBlt(hdc, 0, 0, Me.Width, Me.Height, hSrcDC, 0, 0, dwRop)
    Res = ReleaseDC(hwndSrc, hSrcDC)    'デバイスコンテキストを開放
End Sub
  

◆イメージコントロールに画面をキャプチャする方法

ClipboardオブジェクトのGetDataメソッドを利用する方法です。


次の例はキーボードのPrnt scrnをプログラムから押して、クリップボードに転送します。クリップボードに転送された画面をClipboadオブジェクトのGetDataメソッドで取得し、イメージコントロールに表示します。


フォームにイメージコントロールを追加し、Visual Basicのメニューから[プロジェクト]-[Project1のプロパティ]で表示されるプロジェクトプロパティの[スタートアップの設定]をSub Mainにしておきます。

標準モジュール

Option Explicit

'APIの宣言
Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, _
  ByVal bScan As Byte, ByVal dwFlags As Long, _
  ByVal dwExtraInfo As Long)

Sub Main()
    DoEvents
    Const VK_SNAPSHOT As Byte = &H2C
    DoEvents
    Call keybd_event(VK_SNAPSHOT, 0, 0, 0)
    DoEvents
    Form1.Image1.Picture = Clipboard.GetData(vbCFBitmap)
    DoEvents
    Form1.Show
End Sub
  

フォームモジュール

Private Sub Form_Load()
    Image1.Left = 0
    Image1.Top = 0
    Image1.Width = Form1.Width
    Image1.Height = Form1.Height
End Sub
  

なお、フォームのプロパティでWindowStateプロパティを[2-最大化]にしておくとよいでしょう。


また、Form_Loadのコードを次のように書き換えると、キャプチャしたデスクトップ画面がイメージコントロールの大きさで表示されます。

Private Sub Form_Load()
    Image1.Stretch=true
End Sub
▼ページトップへ