スナップショットを取得(U) <TOP>
SendInput
キーストローク、マウスの動き、ボタンのクリックなどを合成
OpenClipboard クリップボードをオープン
IsClipboardFormatAvailable
指定したフォーマットがクリップボードにあるかどうか判定
GetClipboardData クリップボードから指定フォーマットのデータを検索
CloseClipboard クリップボードをクローズ
CreateCompatibleDC メモリデバイスコンテキストを作成
SelectObject 指定されたデバイスコンテキストのオブジェクトを選択
GetObject
オブジェクト取得
BitBlt
ビットブロック転送
DeleteDC
指定されたデバイスコンテキストを削除
GetDC
デバイスコンテキストのハンドルを取得
ReleaseDC
デバイスコンテキストを解放
「PrintScreen」キーの操作に相当するイベントを擬似的に発生させ、クリップボードに画面全体のスナップショットを取得。
「表示」で、PictureBoxに表示させています。
'================================================================ '= スナップショットを取得(U) '= (SendInput.bas) '================================================================ #include "Windows.bi" Type KEYBDINPUT wVk As Integer wScan As Integer dwFlags As Long ntime As Long dwExtraInfo As Long bytUnusedPadding(7) As Byte End Type Type tagINPUT dwtype As Long ki As KEYBDINPUT End Type Type BITMAP bmType As Long bmWidth As Long bmHeight As Long bmWidthBytes As Long bmPlanes As Integer bmBitsPixel As Integer bmBits As Long End Type #define INPUT_KEYBOARD 1 #define INPUT_HARDWARE 2 #define VK_SNAPSHOT &H2C '[Snap Shot] #define KEYEVENTF_KEYUP &H2 'キーを放す #define CF_BITMAP 2 'ビットマップのデータ(HBITMAP) #define SRCCOPY &HCC0020 'そのまま転送 ' キーストローク、マウスの動き、ボタンのクリックなどを合成 Declare Function Api_SendInput& Lib "user32" Alias "SendInput" (ByVal cInputs&, ByRef pInputs As tagINPUT, ByVal cbSize&) ' クリップボードをオープン Declare Function Api_OpenClipboard& Lib "user32" Alias "OpenClipboard" (ByVal hWnd&) ' 指定したフォーマットがクリップボードにあるかどうか判定 Declare Function Api_IsClipboardFormatAvailable& Lib "user32" Alias "IsClipboardFormatAvailable" (ByVal wFormat&) ' クリップボードから指定フォーマットのデータを検索 Declare Function Api_GetClipboardData& Lib "user32" Alias "GetClipboardData" (ByVal wFormat&) ' クリップボードをクローズ Declare Function Api_CloseClipboard& Lib "user32" Alias "CloseClipboard" () ' 指定されたデバイスコンテキストに関連するデバイスと互換性のあるメモリデバイスコンテキストを作成 Declare Function Api_CreateCompatibleDC& Lib "gdi32" Alias "CreateCompatibleDC" (ByVal hDC&) ' 指定されたデバイスコンテキストのオブジェクトを選択 Declare Function Api_SelectObject& Lib "gdi32" Alias "SelectObject" (ByVal hDC&, ByVal hObject&) ' オブジェクト取得 Declare Function Api_GetObject& Lib "gdi32" Alias "GetObjectA" (ByVal hObject&, ByVal nCount&, lpObject As Any) ' ビットブロック転送を行う。コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー Declare Function Api_BitBlt& Lib "gdi32" Alias "BitBlt" (ByVal hDestDC&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal hSrcDC&, ByVal xSrc&, ByVal ySrc&, ByVal dwRop&) ' 指定されたデバイスコンテキストを削除 Declare Function Api_DeleteDC& Lib "gdi32" Alias "DeleteDC" (ByVal hDC&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) Var Shared Text1 As Object Var Shared Picture1 As Object Var Shared Button1 As Object Var Shared Button2 As Object Text1.Attach GetDlgItem("Text1") : Text1.SetFontSize 14 Picture1.Attach GetDlgItem("Picture1") : Picture1.SetFontSize 14 Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14 '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Var ta(1) As tagINPUT Var Ret As Long 'インプットイベントの種類を指定 ta(0).dwtype = INPUT_KEYBOARD '仮想キーコードを指定 ta(0).ki.wVk = VK_SNAPSHOT 'インプットイベントの種類を指定 ta(1).dwtype = INPUT_KEYBOARD '仮想キーコードを指定 ta(1).ki.wVk = VK_SNAPSHOT '動作を指定 ta(1).ki.dwFlags = KEYEVENTF_KEYUP 'キーストロークを合成 Ret = Api_SendInput(2, ta(0), Len(ta(0))) End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Var bmp As BITMAP Var hBit As Long Var phDC As Long Var mhDC As Long Var Ret As Long phDC = Api_GetDC(Picture1.GethWnd) Picture1.Cls 'Bitmap型式データの有無を調査 If Api_IsClipboardFormatAvailable(CF_BITMAP) <> 0 Then Ret = Api_OpenClipboard(GethWnd) '指定フォーマットのBITMAPデータを検索 hBit = Api_GetClipboardData(CF_BITMAP) 'メモリデバイスコンテキストを作成 mhDC = Api_CreateCompatibleDC(phDC) 'Object取得 Ret = Api_GetObject(hBit, Len(bmp), bmp) 'Object選択 Ret = Api_SelectObject(mhDC, hBit) '指定の(PictureBox)のデバイスコンテキストにメモリデバイスコンテキストのデータを転送 Ret = Api_BitBlt(phDC, 0, 0, bmp.bmWidth, bmp.bmHeight, mhDC, 0, 0, SRCCOPY) Ret = Api_ReleaseDC(Picture1.GethWnd, phDC) Ret = Api_DeleteDC(mhDC) Ret = Api_CloseClipboard() End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End