クライアント領域の取得
- 題名: クライアント領域の取得
- 著者: とある結核患者
- 日時: 2010/06/07 11:25:19
- ID: 26910
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: クライアント領域の取得
- 著者: Hongliang
- 日時: 2010/06/07 12:51:26
- ID: 26911
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: クライアント領域の取得
- 著者: とある結核患者
- 日時: 2010/06/07 13:38:21
- ID: 26912
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[3]: クライアント領域の取得
- 著者: とある結核患者
- 日時: 2010/06/07 13:50:07
- ID: 26913
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.NET]
OS Windows Vista Business
vb.net 2003
画面キャプチャでクライアント領域を取得したいのですがAPI32[GetClientRect]でrightとbottomが0で帰ってきます。
以下コードです
[form1]
Private Sub Capture1(ByVal key As IntPtr)
PictureBox2.Image = win32api.CaptureWindow(key)
end sub
[class]
Imports System.Runtime.InteropServices
Public Class win32api
<DllImport("user32", EntryPoint:="GetClientRect")> _
Private Shared Function GetClientRect( _
ByVal hWnd As IntPtr, _
ByVal lpRect As RECT) As Integer
End Function
<DllImport("user32", EntryPoint:="SetForegroundWindow")> _
Private Shared Function SetForegroundWindow( _
ByVal hWnd As IntPtr) _
As Integer
End Function
<DllImport("user32.dll")> _
Private Shared Function GetDC(ByVal hwnd As IntPtr) As IntPtr
End Function
<DllImport("gdi32.dll")> _
Private Shared Function BitBlt(ByVal hDestDC As IntPtr, _
ByVal x As Integer, ByVal y As Integer, _
ByVal nWidth As Integer, ByVal nHeight As Integer, _
ByVal hSrcDC As IntPtr, _
ByVal xSrc As Integer, ByVal ySrc As Integer, _
ByVal dwRop As Integer) As Integer
End Function
<DllImport("user32.dll")> _
Private Shared Function ReleaseDC(ByVal hwnd As IntPtr, _
ByVal hdc As IntPtr) As IntPtr
End Function
<DllImport("user32.dll")> _
Private Shared Function GetForegroundWindow() As IntPtr
End Function
<DllImport("user32.dll")> _
Private Shared Function GetWindowRect(ByVal hwnd As IntPtr, _
ByRef lpRect As RECT) As Integer
End Function
<StructLayout(LayoutKind.Sequential)> _
Private Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
Const SRCCOPY As Long = 13369376
Public Shared Function CaptureWindow(ByVal hWnd As IntPtr) As Bitmap
'
SetForegroundWindow(hWnd)
Dim h As Long = GetActiveWindow
'指定のウィンドウのデバイスコンテキストを取得
Dim winDC As IntPtr = GetDC(hWnd)
'ウィンドウの大きさを取得
Dim winRect As New RECT
GetWindowRect(hWnd, winRect)
'Bitmapの作成
Dim bmp As New Bitmap(winRect.right - winRect.left, _
winRect.bottom - winRect.top)
'Graphicsの作成()
Dim g As Graphics = Graphics.FromImage(bmp)
Dim cliRect As RECT
GetClientRect(hWnd, cliRect)
'Graphicsのデバイスコンテキストを取得
Dim hDC As IntPtr = g.GetHdc()
'Bitmapに画像をコピーする
BitBlt(hDC, 0, 0, bmp.Width, bmp.Height, winDC, 0, 0, SRCCOPY)
'解放
g.ReleaseHdc(hDC)
g.Dispose()
ReleaseDC(hWnd, winDC)
Return bmp
End Function
end class
[CaptureWindow]はこのサイトで見つけたコードです
上記コードでウィンドウ全体がキャプチャされるのでクライアント領域だけを[Form2.PictureBox2]に表示したいのですがそのためにクライアント領域のサイズを取得したいのです。
よろしくご教示お願いいたします。