画面をキャプチャする方法
◆概要
このページは、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