2012-03-13 87 views
3

我需要的代碼將在Visual Basic中運行,以捕獲屏幕並將其轉換爲像素值的RBG數組 - 需要相當快。從屏幕上的Visual Basic RBG捕獲

任何幫助?

+0

我還沒有嘗試過任何東西(但在紅寶石很多) – marscom 2012-03-13 02:41:29

+0

做[任何](http://www.developerfusion.com/code/181/capture-screenshot/)[的](http://www.codeproject .com /文章/ 27269 /截圖 - 桌面 - 編程方式 - 在)[這些](https://www.google.co.uk/search?hl=en&q=vb6+capture+screenshot&meta=)不回答你的問題? – Deanna 2012-03-13 13:01:49

+0

哦,ARGB是octects的正常順序,並且是Windows原生的。 – Deanna 2012-03-13 13:03:54

回答

8

此代碼將從窗口或整個桌面(虛擬屏幕)捕獲屏幕截圖並將其繪製到自定義picturebox。

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 Function 

請注意在捕獲桌面時使用GetSystemMetrics()。這使得它可以在使用多個顯示器而不是just the primary monitor時獲得完整的虛擬屏幕尺寸。