2016-07-14 234 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 

嘗試使用緹計算的

'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 
讓整個屏幕