You are on page 1of 9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

12,095,873 members 71,560 online

articles

Q&A

forums

Sign in

lounge

Searchforarticles,questions,tips

TeboScreen: Basic C# Screen Capture Application


GuyThiebaut, 18 Feb 2012

CPOL

Rate this:

4.72 66 votes
A C# screensaver application to illustrate simple screen capture principles

Download TeboScreen executable 9.11 KB


Download TeboScreen full source code 22.88 KB

Introduction
This application captures the screen in two different ways:
Capture Screen: This does what is says; it basically captures the whole of the screen once the file name of the resulting
image has been specified.
Capture Area: Holding down the left mouse button, users draw a rectangle specifying which part of the screen they wish
to capture. On double clicking, the user selects a file name and the area behind the drawn rectangle is captured to this
file. Once drawn, the rectangle can be resized and moved around the screen before double clicking to save the image.

Background
This application was an exercise I set myself in C#. Being new to C#, I wanted to see how straightforward creating a screen
capture application would be. In the end, it took me an afternoon to write the application not too onerous.
I decided on a simple solution to the question of how do you allow the user draw a rectangle on a screen.
The application maximizes a form which has a transparency of 30%. The drawing of the rectangle involves drawing a rectangle
and then erasing the previous rectangle by drawing a rectangle in the form's background colour.
As the form is maximized, any coordinates on this form correspond to screen coordinates underneath.
http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

1/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

It is then a simple matter of returning the coordinates of the drawn rectangle to the ScreenShot.CaptureImage
method.
Some additional features are the ability to save the image to the clipboard, include the cursor in the image in this case, by
pressing the 'S' key and to enable the user to resize and drag the selection area once the initial selection area has been drawn.

Using the Code


There are two modes of screen capture capture screen and capture area.

Capture Screen
All we need to do is pass the screen area to the ScreenShot.CaptureImage method. The only thing to note here is that
we pause for 250 milliseconds to allow the screen to repaint itself. Not doing this can cause the form, from which the command
was invoked, to be included in the capture even though it has been instructed to minimize.
Hide Copy Code

//Allow250millisecondsforthescreentorepaintitself
//(wedon'twanttoincludethisforminthecapture)
System.Threading.Thread.Sleep(250);
Rectanglebounds=Screen.GetBounds(Screen.GetBounds(Point.Empty));
stringfi="";
if(ScreenPath!="")
{
fi=newFileInfo(ScreenPath).Extension;
}
ScreenShot.CaptureImage(showCursor,curSize,curPos,
Point.Empty,Point.Empty,bounds,ScreenPath,fi);

Capture Area
Holding down the left mouse button, the user draws a rectangle specifying which part of the screen they wish to capture. On
releasing the left mouse button, the user can resize or move the selection area or they can double click to select a file name
what is behind the drawn rectangle is then captured to this selected file.
The mouse_Move event is used to decide on whether the user is drawing, draggingmoving or resizing the selection area.
Each of the methods erases the previous rectangle and to creates a new rectangle every time the mouse is moved while the
left mouse button is held down. This gives the illusion of a rectangle moving.
Hide Copy Code

privatevoidmouse_Move(objectsender,MouseEventArgse)
{
if(LeftButtonDown&&!RectangleDrawn)
{
DrawSelection();
}
if(RectangleDrawn)
{
CursorPosition();
if(CurrentAction==ClickAction.Dragging)
{
http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

2/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

DragSelection();
}
if(CurrentAction!=ClickAction.Dragging&&CurrentAction!=ClickAction.Outside)
{
ResizeSelection();
}
}
}
Here is how we call ScreenShot.CaptureImage for Capture Area.
Hide Copy Code

PointStartPoint=newPoint(CurrentTopLeft.X,CurrentTopLeft.Y);
Rectanglebounds=newRectangle(CurrentTopLeft.X,CurrentTopLeft.Y,
CurrentBottomRight.XCurrentTopLeft.X,CurrentBottomRight.YCurrentTopLeft.Y);
...
ScreenShot.CaptureImage(showCursor,curSize,curPos,StartPoint,
Point.Empty,bounds,ScreenPath,fi);
The code that captures the screen is in a class called ScreenShot which contains a staticmethod called
CaptureImage.
This is where the code applies all the selected options include/exclude cursor, save to clipboard/file and type of file the image
is saved to.
Hide Shrink

Copy Code

classScreenShot
{
publicstaticboolsaveToClipboard=false;
publicstaticvoidCaptureImage(boolshowCursor,SizecurSize,PointcurPos,
PointSourcePoint,PointDestinationPoint,RectangleSelectionRectangle,
stringFilePath,stringextension)
{
using(Bitmapbitmap=newBitmap(SelectionRectangle.Width,
SelectionRectangle.Height))
{
using(Graphicsg=Graphics.FromImage(bitmap))
{
g.CopyFromScreen(SourcePoint,DestinationPoint,
SelectionRectangle.Size);
if(showCursor)
{
RectanglecursorBounds=newRectangle(curPos,curSize);
Cursors.Default.Draw(g,cursorBounds);
}
}
if(saveToClipboard)
{
Imageimg=(Image)bitmap;
Clipboard.SetImage(img);
}
else
{
switch(extension)
{
case".bmp":
bitmap.Save(FilePath,ImageFormat.Bmp);
break;
case".jpg":
http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

3/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

bitmap.Save(FilePath,ImageFormat.Jpeg);
break;
case".gif":
bitmap.Save(FilePath,ImageFormat.Gif);
break;
case".tiff":
bitmap.Save(FilePath,ImageFormat.Tiff);
break;
case".png":
bitmap.Save(FilePath,ImageFormat.Png);
break;
default:
bitmap.Save(FilePath,ImageFormat.Jpeg);
break;
}
}
}
}
Two methods that have been added recently January 2012 are Clipboard.SetImage and Cursors.Default.Draw.
The first method will copy the screen or area captured to the clipboard and the second method includes the cursor as an
arrow in the image.
The addition of the cursor can be particularly useful if you need to point something out in a screenshot such as a button.
To include the cursor in the image, the application's KeyUpevents listen for the 'S' key this then triggers the
ScreenCapture method specifying the inclusion of the cursor.
I have added this event to each button on the application a more efficient way to do this would be to handle any keys that are
pressed while the application is open the reason I have chosen this method is so that the software is not flagged as key
logging by security software.
Hide Copy Code

privatevoidkeyTest(KeyEventArgse)
{
if(e.KeyCode.ToString()=="S")
{
screenCapture(true);
}
}
Both the addition of the cursor and clipboard feature are from requests, so please do keep the suggestions and requests
coming in as I do tend to act on them.
I am also aware that Windows 7 now comes bundled with a snipping tool this article was first created in 2007 before Windows
7 had been released.
I feel the article still has some relevance in terms of illustrating the drawing and moving of objects on the screen and taking
screenshots.

Developments
TeboScreen has been branched into a new project and article called ScreenCap by Patrick Harris.
Amongst the extra features ScreenCap provides are:
Run in the background and become activated when the Print Screen button is pressed.
Support for dual monitors, regardless of whether there is a size difference in monitors.
Automatically send screen capture to three devices: Clipboard, Printer, and Email.
As a developer, I am very happy with this new development and I look forward to seeing where Patrick takes this new branch.

http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

4/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

History
4 December, 2007 Original version posted
18 December, 2007 Downloads and article content updated
New download code fixes bugs in the drawing of the selection rectangle
Replacement article text for the mouse_Move event
3 July, 2011 The updated code includes changes that allow the user to resize and move the image capture selection
area. There is also a tips button which when clicked shows basic use instructions.
28 December, 2011 Downloads updated
19 January, 2012 Article and downloads updated
18 February, 2012 An addition in order to reference Patrick Harris' ScreenCap article

License
This article, along with any associated source code and files, is licensed under The Code Project Open License CPOL

Share
About the Author
GuyThiebaut
Software Developer
United Kingdom

Graduated with BSchons in Information Systems in 1992 and have had to learn pretty much everything on the job since
then.
Currently: Developer SQL Server and .Net.
Used to be: AnalystUsing Oracle, SAS, Excel... and before that a SQLServer 2000 DBA, Microsoft XAL developer.
Main skill set includes SQL Server, PL/SQL, C#, VB .NET, Access, Excel, Word VBA, SAS...

Interests include reading and things that fly.


I am a keen origamipaper folding amateur.
Was once a classical guitarist, however Metallica have corrupted my tastes.
I run teboweb.com as a hobby

http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

5/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

You may also be interested in...


ScreenCap: C# Screen Capture
Application branched from
TeboScreen by GuyThiebaut

AvePoint & Amazon Web


Services: SharePoint in AWS

Screen Capturing

SAPrefs Netscapelike
Preferences Dialog

Screen Capture Class

Window Tabs WndTabs Add


In for DevStudio

Comments and Discussions

You must Sign In to use this message board.


Search Comments

Go
First Prev Next

Problem with Multiple Monitors


Arslan Elahi 10May14 9:14
Something intrigues me.
Member 10636503 18Apr14 22:42
DLL
Member 10719314
Re: DLL
GuyThiebaut

2Apr14 10:03

2Apr14 11:05

Re: DLL
Member 10719314
Re: DLL
GuyThiebaut

2Apr14 14:50

2Apr14 21:35

Re: DLL
Member 10719314

3Apr14 1:43

Thanks so much, helped alot


Member 8127345 13Nov13 4:27
http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

6/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

Member 8127345

13Nov13 4:27

Re: Thanks so much, helped alot


Arslan Elahi 10May14 7:29
Thank you
GeorgeHLord

4Nov13 17:08

Re: Thank you


GuyThiebaut

5Nov13 2:58

Resources for learning


ProCodingKing 25Jul13 7:19
Re: Resources for learning
GuyThiebaut 25Jul13 7:30
My vote of 5
wsc0918 19Jun13 16:28
Re: My vote of 5
GuyThiebaut 20Jun13 7:14
Will it Capture UAC Dialog
kburman6 11May13 10:55
Screen is not captured while display is off.
@AmitGajjar 26Apr13 21:46
Re: Screen is not captured while display is off.
GuyThiebaut 26Apr13 21:52
Re: Screen is not captured while display is off.
@AmitGajjar 26Apr13 22:08
Store a screenshot directly in database.
ShivangDesai 6Feb13 20:09
Re: Store a screenshot directly in database.
GuyThiebaut 7Feb13 4:40
Re: Store a screenshot directly in database.
ShivangDesai 7Feb13 20:30
Re: Store a screenshot directly in database.
GuyThiebaut 7Feb13 21:13
Re: Store a screenshot directly in database.
GuyThiebaut 8Feb13 0:29
Re: Store a screenshot directly in database.
ShivangDesai 10Feb13 19:09
Re: Store a screenshot directly in database.
GuyThiebaut 11Feb13 2:53
.....................................
ricardmag 15Jan13 11:07
Re: .....................................
GuyThiebaut 15Jan13 11:10
Could you help me, please?
extreme699 29Oct12 5:49
http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

7/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

extreme699

29Oct12 5:49

Re: Could you help me, please?


GuyThiebaut 29Oct12 10:53
Re: Could you help me, please?
extreme699 30Oct12 6:14
Re: Could you help me, please?
GuyThiebaut 30Oct12 9:34
My vote of 5
Farhan Ghumra

19Jun12 23:48

Re: My vote of 5
GuyThiebaut 20Jun12 2:02
My vote of 5
chimmansrikanth

24May12 21:16

Re: My vote of 5
GuyThiebaut 25May12 9:00
Copy the Image from Clipboard to the word document
chimmansrikanth 24May12 21:09
Re: Copy the Image from Clipboard to the word document
GuyThiebaut 25May12 9:04
Re: Copy the Image from Clipboard to the word document
chimmansrikanth 25May12 19:33
WONDERFUL ! ! ! ! ! !
Patrick_SURFThru 10Apr12 9:56
Re: WONDERFUL ! ! ! ! ! !
GuyThiebaut 10Apr12 13:13
open the croped image ina picture box
jeffingeorge 29Mar12 1:21
Re: open the croped image ina picture box
GuyThiebaut 29Mar12 1:53
Re: open the croped image ina picture box
jeffingeorge 29Mar12 2:09
Re: open the croped image ina picture box
GuyThiebaut 29Mar12 2:52
Re: open the croped image ina picture box
jeffingeorge 29Mar12 2:59
Re: open the croped image ina picture box
GuyThiebaut 30Mar12 6:56
Multiple screens
ThomasManz 23Jan12 9:16
Re: Multiple screens
GuyThiebaut 23Jan12 9:20
Re: Multiple screens
Patrick Harris 15Feb12 9:44
http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

8/9

2/22/2016

TeboScreen:BasicC#ScreenCaptureApplicationCodeProject

Patrick Harris

15Feb12 9:44

Refresh
General

1 2 3 Next
News

Suggestion

Question

Bug

Answer

Joke

Praise

Rant

Admin

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Terms of Use | Mobile


Web04 | 2.8.160217.1 | Last Updated 18 Feb 2012

Chn Ngn ng

Layout: fixed | fluid

http://www.codeproject.com/Articles/21913/TeboScreenBasicCScreenCaptureApplication

Article Copyright 2007 by GuyThiebaut


Everything else Copyright CodeProject, 19992016

9/9

You might also like