2016-07-14 24 views
0

ボタンをクリックしたときに呼び出すスクリーンショット機能が見つかりました。私が見ている問題は、画面の特定の部分(画面の中央に向かって右上隅から始まる)が、自分のフォーム上にあるpicScreenに含まれているということです。私が見たい次元を指定する方法がありますか、基本的に画面全体をpicScreen内に収める方法がありますか?VB6 - スクリーンショット機能

Private Type RECT 
Left As Long 
Top As Long 
Right As Long 
Bottom As Long 
End Type 

Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long 
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long 
Private Declare Function GetDesktopWindow Lib "user32"() As Long 

Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long 
Private 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 
Private Declare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, ByVal hDC As Long) As Long 

Private Const SM_XVIRTUALSCREEN = 76 
Private Const SM_YVIRTUALSCREEN = 77 
Private Const SM_CYVIRTUALSCREEN = 79 
Private Const SM_CXVIRTUALSCREEN = 78 

Private Sub GetScreenshot(Optional ByVal hWnd As Long = 0) 
Dim hDC As Long 

Dim WindowRect As RECT 
Dim Left As Long 
Dim Top As Long 
Dim Width As Long 
Dim Height As Long 

If hWnd = 0 Then 
'Get the DC of the desktop 
hDC = GetWindowDC(GetDesktopWindow) 

'Get the virtual screen coordinates (this handles multiple monitors too :) 
Left = GetSystemMetrics(SM_XVIRTUALSCREEN) 
Top = GetSystemMetrics(SM_YVIRTUALSCREEN) 
Width = GetSystemMetrics(SM_CXVIRTUALSCREEN) 
Height = GetSystemMetrics(SM_CYVIRTUALSCREEN) 

Else 
'Get the DC of the window we want to capture 
hDC = GetWindowDC(hWnd) 

'Get the window coordinates 
GetWindowRect hWnd, WindowRect 
Left = 0 
Top = 0 
Width = WindowRect.Right - WindowRect.Left 
Height = WindowRect.Bottom - WindowRect.Top 

End If 

'BitBlt into our own DC 
BitBlt picScreen.hDC, 0, 0, Width, Height, hDC, Left, Top, vbSrcCopy 

'Delete our reference to the windows's DC 
ReleaseDC hWnd, hDC 
End Sub 

* Here's where I call my function specifying that I want the entire screen. 

Private Sub cmdScreenShot_Click() 
Call GetScreenshot(GetDesktopWindow) 
End Sub 

答えて

1

代わりの

If hWnd = 0 Then 
'Get the DC of the desktop 
hDC = GetWindowDC(GetDesktopWindow) 

'Get the virtual screen coordinates (this handles multiple monitors too :) 
Left = GetSystemMetrics(SM_XVIRTUALSCREEN) 
Top = GetSystemMetrics(SM_YVIRTUALSCREEN) 
Width = GetSystemMetrics(SM_CXVIRTUALSCREEN) 
Height = GetSystemMetrics(SM_CYVIRTUALSCREEN) 

Else 
'Get the DC of the window we want to capture 
hDC = GetWindowDC(hWnd) 

'Get the window coordinates 
GetWindowRect hWnd, WindowRect 
Left = 0 
Top = 0 
Width = WindowRect.Right - WindowRect.Left 
Height = WindowRect.Bottom - WindowRect.Top 

End If 
'BitBlt into our own DC 
BitBlt picScreen.hDC, 0, 0, Width, Height, hDC, Left, Top, vbSrcCopy 

twip単位カルク

'Use size of screen 
Width = Screen.Width \ Screen.TwipsPerPixelX 
Height = Screen.Height \ Screen.TwipsPerPixelY 

'Copy the data from the screen hDC to this VB form 
BitBlt picScreen.hDC, 0, 0, Width, Height, hDC, 0, 0, vbSrcCopy 
を使用して、画面全体を取得して試してみてください
関連する問題