解像度の取得には、GetDeviceCaps関数を使用します。
この関数は、引数に指定される値に従って、得たい情報が戻り値として 返されます。得られる情報は、画面の幅やピクセルあたりのカラービット数 など様々です。
画面の色数 = 2^(ピクセルあたりのカラービット数)
画面の取り込みには、GetDC,ReleaseDC,StretchBlt関数を使用します。
(GetDeviceCaps 関数等の使用方法)
このサンプルでは、CommandButtonをクリックすることで、解像度を得たり 画面を取り込みPictureBoxにコピーしたりします。
フォームのGeneralセクションに次の宣言コードを追加して下さい。
次に、フォームに以下のようにコントロールを配置し、 Command1_Click(),Command2_Click()プロシージャに次のコードを追加します
'APIの宣言 '指定されたデバイスに関するデバイス固有の情報を取得 Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _ ByVal nIndex As Long) As Long 'nIndexに当たる定数 Private Const HORZSIZE = 4 '物理画面の幅 (ミリメートル単位) Private Const VERTSIZE = 6 '物理画面の高さ (ミリメートル単位) Private Const HORZRES = 8 '画面の幅 (ピクセル単位) Private Const VERTRES = 10 '画面の高さ (ピクセル単位) Private Const BITSPIXEL = 12'ピクセルあたりのカラービットの数 (プレーンごと) Private Const PLANES = 14 'カラープレーン数 'デバイスコンテキストを得る Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) _ As Long 'デバイスコンテキストを解放する Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As _ Long, ByVal hdc As Long) As Long '描画関数 Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, _ ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
'解像度の表示 Private Sub Command1_Click() Dim ScreenHdc As Long ScreenHdc = GetDC(0&) Label1.Caption = GetDeviceCaps(ScreenHdc, HORZRES) _ & "×" & _ GetDeviceCaps(ScreenHdc, VERTRES) _ & " ピクセル " & Chr(10) & _ 2 ^ (GetDeviceCaps(ScreenHdc, BITSPIXEL)) _ & "色" ReleaseDC 0&, ScreenHdc End Sub
'画面取り込み Private Sub Command2_Click() Dim ScreenHdc As Long'スクリーンデバイス Dim S_Hor As Long 'スクリーンの幅 Dim S_Ver As Long 'スクリーンの高さ ScreenHdc = GetDC(0&)'デバイスコンテキストを取得 S_Hor = GetDeviceCaps(ScreenHdc, HORZRES) S_Ver = GetDeviceCaps(ScreenHdc, VERTRES) 'スクリーン画面をPicture1に縮小コピー StretchBlt Picture1.hdc, 0&, 0&, Picture1.ScaleWidth, _ Picture1.ScaleHeight, ScreenHdc, 0&, 0&, S_Hor, _ S_Ver, vbSrcCopy
ReleaseDC 0&, ScreenHdc'デバイスコンテキストの解放 Picture1.Refresh 'コピーを反映 End Sub