Login Register






Thread Rating:
  • 0 Vote(s) - 0 Average


[VB.Net / C#] Capture (even offscreen) Window by name filter_list
Author
Message
[VB.Net / C#] Capture (even offscreen) Window by name #1
Thanks to [link=http://www.codeproject.com/script/Membership/View.aspx?mid=2637676]rootjumper[/link] from [link=http://www.codeproject.com]CodeProject[/link] for the [link=http://www.codeproject.com/Messages/3240814/Re-Capture-Screenshot-of-a-Window-With-Handle.aspx]Capture function[/link]

C#
Code:
public class frmMain
{
    [DllImport("user32.dll")]
    private static extern bool PrintWindow(IntPtr hwnd, IntPtr hdcBlt, uint nFlags);

    [DllImport("user32.dll")]
    private static extern int GetWindowRect(IntPtr hWnd, ref Rectangle rect);

    [DllImport("user32.dll", EntryPoint = "GetDC")]
    public static extern IntPtr GetDC(IntPtr ptr);

    [DllImport("gdi32.dll", EntryPoint = "DeleteObject")]
    public static extern IntPtr DeleteObject(IntPtr hDc);

    [DllImport("user32.dll", EntryPoint = "FindWindowA")]
    public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    private new Bitmap Capture(IntPtr pHwnd)
    {
        // Rectobject
        Rectangle r = new Rectangle(0, 0, 0, 0);
        GetWindowRect(pHwnd, ref r);
        // GetWindowRectangle

        r.Width = r.Width - r.X;
        // Set Client Rectangle only (like ALT + Print)
        r.Height = r.Height - r.Y;

        Bitmap bmp = new Bitmap(r.Width, r.Height);
        // Create new empty Bitmap
        Graphics e = Graphics.FromImage(bmp);
        // Get Grapthics from Bitmap
        IntPtr ptr = e.GetHdc();
        // Get Graphics Handle

        try {
            // Get DeviceContext Handles
            IntPtr hDC = GetDC(pHwnd);

            // Copy Screen from Process-Handle into Bitmap handle
            PrintWindow(pHwnd, ptr, 0);

            // Delete the DeviceContextHandle
            DeleteObject(hDC);
        } catch {
        }

        e.ReleaseHdc(ptr);
        // Apply new bitmap handle with graphics
        e.Flush();
        // apply changes
        e.Dispose();
        // free graphic object
        return bmp;

    }

    private void timCapture_Tick(System.Object sender, System.EventArgs e)
    {
                // Captures Notepad Window
        this.BackgroundImage = Capture(FindWindow("notepad", null));
    }
}

VB.Net

Code:
Imports System.Runtime.InteropServices

Public Class frmMain
    <DllImport("user32.dll")> _
    Private Shared Function PrintWindow(ByVal hwnd As IntPtr, ByVal hdcBlt As IntPtr, ByVal nFlags As UInteger) As Boolean
    End Function

    <DllImport("user32.dll")> _
    Private Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef rect As Rectangle) As Integer
    End Function

    <DllImport("user32.dll", EntryPoint:="GetDC")> _
    Public Shared Function GetDC(ByVal ptr As IntPtr) As IntPtr
    End Function

    <DllImport("gdi32.dll", EntryPoint:="DeleteObject")> _
    Public Shared Function DeleteObject(ByVal hDc As IntPtr) As IntPtr
    End Function

    <DllImport("user32.dll", EntryPoint:="FindWindowA")> _
    Public Shared Function FindWindow(ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
    End Function

    Private Shadows Function Capture(ByVal pHwnd As IntPtr) As Bitmap
        ' Rectobject
        Dim r As New Rectangle(0, 0, 0, 0)
        GetWindowRect(pHwnd, r)                     ' GetWindowRectangle

        r.Width = r.Width - r.X                     ' Set Client Rectangle only (like ALT + Print)
        r.Height = r.Height - r.Y

        Dim bmp As New Bitmap(r.Width, r.Height)    ' Create new empty Bitmap
        Dim e As Graphics = Graphics.FromImage(bmp) ' Get Grapthics from Bitmap
        Dim ptr As IntPtr = e.GetHdc()              ' Get Graphics Handle

        Try
            ' Get DeviceContext Handles
            Dim hDC As IntPtr = GetDC(pHwnd)

            ' Copy Screen from Process-Handle into Bitmap handle
            PrintWindow(pHwnd, ptr, 0)

            ' Delete the DeviceContextHandle
            DeleteObject(hDC)
        Catch
        End Try

        e.ReleaseHdc(ptr)                           ' Apply new bitmap handle with graphics
        e.Flush()                                   ' apply changes
        e.Dispose()                                 ' free graphic object
        Return bmp

    End Function

    Private Sub timCapture_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles timCapture.Tick
        Me.BackgroundImage = Capture(FindWindow("notepad", Nothing)) 'Captures Notepad Window
    End Sub
End Class
[Image: rytwG00.png]
Redcat Revolution!

Reply







Users browsing this thread: 1 Guest(s)