デスクトップ画面を異なる方法で転送 <TOP>
デスクトップ画面をBitBlt、StretchBlt、SetStretchBltModeで転送しています。
StretchBltとSetStretchBltModeでの違いに注目
BitBlt
ビットブロック転送を行う
StretchBlt
拡縮をともなうグラフィックデバイス間のイメージを転送
SetStretchBltMode
指定されたデバイスコンテキストのビットマップ伸縮モードを設定
GetDesktopWindow
Windows のデスクトップ ウィンドウを識別
GetWindowDC
ウィンドウ全体のデバイスコンテキストを取得
GetDC
デバイスコンテキストのハンドルを取得
ReleaseDC
デバイスコンテキストを解放
BitBlt(等倍・そのまま転送)
StretchBltMode(綺麗に縮小転送)
StretchBlt(通常縮小転送)
'================================================================ '= デスクトップ画面を転送 '= (BitBlt2.bas) '================================================================ #include "Windows.bi" ' ビットブロック転送を行う。コピー元からコピー先のデバイスコンテキストへ、指定された長方形内の各ピクセルの色データをコピー 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_StretchBlt& Lib "gdi32" Alias "StretchBlt" (ByVal hDC&, ByVal X&, ByVal Y&, ByVal nWidth&, ByVal nHeight&, ByVal hSrcDC&, ByVal xSrc&, ByVal ySrc&, ByVal nSrcWidth&, ByVal nSrcHeight&, ByVal dwRop&) ' 指定されたデバイスコンテキストのビットマップ伸縮モードを設定 Declare Function Api_SetStretchBltMode& Lib "gdi32" Alias "SetStretchBltMode" (ByVal hDC&, ByVal nStretchMode&) ' Windows のデスクトップ ウィンドウを識別。返されるポインタは、一時的なポインタ。後で使用するために保存しておくことはできない Declare Function Api_GetDesktopWindow& Lib "user32" Alias "GetDesktopWindow" () ' ウィンドウ全体のデバイスコンテキストを取得 Declare Function Api_GetWindowDC& Lib "user32" Alias "GetWindowDC" (ByVal hWnd&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) #define SRCCOPY &HCC0020 '単純な上書き #define COLORONCOLOR 3 '取り除く点の情報を保存することなく削除 Var Shared PICTURE1 As Object Var Shared Button1 As Object Var Shared Button2 As Object Var Shared Button3 As Object Picture1.Attach GetDlgItem("Picture1") Button1.Attach GetDlgItem("Button1") : Button1.SetFontSize 14 Button2.Attach GetDlgItem("Button2") : Button2.SetFontSize 14 Button3.Attach GetDlgItem("Button3") : Button3.SetFontSize 14 Var Shared dWidth As Long Var Shared dHeight As Long Var Shared Flg As byte '================================================================ '= '================================================================ Declare Sub Mainform_Start edecl () Sub Mainform_Start() dWidth = GetDeviceCaps(8) dHeight = GetDeviceCaps(10) End Sub '================================================================ '= '================================================================ Declare Sub PrintScreen edecl () Sub PrintScreen() Var dHwnd As Long Var dhDC As Long Var phDC As Long Var dLeft As Long Var dTop As Long Var Ret As Long dLeft = 0 dTop = 0 dWidth = GetDeviceCaps(8) dHeight = GetDeviceCaps(10) dHwnd = Api_GetDesktopWindow() dhDC = Api_GetWindowDC(dHwnd) phDC = Api_GetDC(Picture1.GethWnd) If Flg = 0 Then Ret = Api_BitBlt(phDC, 0, 0, dWidth, dHeight, dhDC, dLeft, dTop, SRCCOPY) Else If Flg = 1 Then Ret = Api_SetStretchBltMode(phDC, COLORONCOLOR) Ret = Api_StretchBlt(phDC, 0, 0, Picture1.GetWidth, Picture1.GetHeight, dhDC, dLeft, dTop, dWidth, dHeight, SRCCOPY) Else Ret = Api_StretchBlt(phDC, 0, 0, Picture1.GetWidth, Picture1.GetHeight, dhDC, dLeft, dTop, dWidth, dHeight, SRCCOPY) End If Ret = Api_ReleaseDC(dHwnd, dhDC) End Sub '================================================================ '= '================================================================ Declare Sub Button1_on edecl () Sub Button1_on() Flg = 0 PrintScreen End Sub '================================================================ '= '================================================================ Declare Sub Button2_on edecl () Sub Button2_on() Flg = 1 PrintScreen End Sub '================================================================ '= '================================================================ Declare Sub Button3_on edecl () Sub Button3_on() Flg = 2 PrintScreen End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End