views:

1174

answers:

1

this is code am using to take a screenshot

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

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

[DllImport("gdi32.dll",EntryPoint="BitBlt")]
public static extern bool BitBlt(IntPtr hdcDest,int xDest,
    int yDest,int wDest,int hDest,IntPtr hdcSource,
    int xSrc,int ySrc,int RasterOp);

[DllImport ("gdi32.dll",EntryPoint="CreateCompatibleBitmap")]
public static extern IntPtr CreateCompatibleBitmap(IntPtr hdc,
    int nWidth, int nHeight);

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

[DllImport ("gdi32.dll",EntryPoint="SelectObject")]
public static extern IntPtr SelectObject(IntPtr hdc,IntPtr bmp);

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

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

[DllImport("user32.dll",EntryPoint="GetSystemMetrics")]
public static extern int GetSystemMetrics(int abc);

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

[DllImport("user32.dll",EntryPoint="ReleaseDC")]
public static extern IntPtr ReleaseDC(IntPtr hWnd,IntPtr hDc);

public static Bitmap GetDesktopImage()
{
    //In size variable we shall keep the size of the screen.
    SIZE size;    

    //Variable to keep the handle to bitmap.
    IntPtr hBitmap;

    //Here we get the handle to the desktop device context.
    IntPtr  hDC = GetDC(GetDesktopWindow());

    //Here we make a compatible device context in memory for screen
    //device context.
    IntPtr hMemDC = CreateCompatibleDC(hDC);

    //We pass SM_CXSCREEN constant to GetSystemMetrics to get the
    //X coordinates of the screen.
    size.cx = GetSystemMetrics(SM_CXSCREEN);

    //We pass SM_CYSCREEN constant to GetSystemMetrics to get the
    //Y coordinates of the screen.
    size.cy = GetSystemMetrics(SM_CYSCREEN);

    //We create a compatible bitmap of the screen size and using
    //the screen device context.
    hBitmap = CreateCompatibleBitmap
        (hDC, size.cx, size.cy);

    //As hBitmap is IntPtr, we cannot check it against null.
    //For this purpose, IntPtr.Zero is used.
    if (hBitmap!=IntPtr.Zero)
    {
        //Here we select the compatible bitmap in the memeory device
        //context and keep the refrence to the old bitmap.
        IntPtr hOld = (IntPtr)SelectObject
            (hMemDC, hBitmap);
        //We copy the Bitmap to the memory device context.
        BitBlt(hMemDC, 0, 0,size.cx,size.cy, hDC,0, 0,SRCCOPY);
        //We select the old bitmap back to the memory device context.
        SelectObject(hMemDC, hOld);
        //We delete the memory device context.
        DeleteDC(hMemDC);
        //We release the screen device context.
        ReleaseDC(GetDesktopWindow(), hDC);
        //Image is created by Image bitmap handle and stored in
        //local variable.

        Bitmap bmp = System.Drawing.Image.FromHbitmap(hBitmap); 
        //Release the memory to avoid memory leaks.
        DeleteObject(hBitmap);
        //This statement runs the garbage collector manually.
        GC.Collect();
        //Return the bitmap 
        return bmp;
    }
    //If hBitmap is null, retun null.
    return null;
}

here it will capture the screen short .... although I want to take the screenshot with the tooltip. What do I have to add to take screenshot with the tooltip and cursor visible?

sorry this sites not help me to solve my problems

+1  A: 

Vista has a Snipping tool to easily perform the same as given in

http://blog.falafel.com/2008/08/12/CaptureScreenShotsWithToolTipsAndPopupsUsingVistaSnippingTool.aspx

and an application via sliverlight

http://blogs.msdn.com/swick/archive/2007/12/18/snipping-pictures-with-silverlight.aspx

I don't know whether Source code is available for Snipping tool in any of the msj or msdn

or you can think of capturing as video and then take snaphshot from video.

http://www.codeproject.com/KB/audio-video/CaptureScreenAsVideo.aspx

lakshmanaraj