티스토리 뷰
목차
반응형
C# 윈폼 예제, 스크린 캡쳐 소스 (화면 ScreenShot)
스크린 캡쳐 (ScreenShot) 프로젝트 - WindowsApplication2.zip [클릭]
[C# 윈폼 예제, 스크린 캡쳐 소스 (화면 ScreenShot)]
간단한 C# 윈폼 스크린샷 프로그램입니다. 필요한 건 역시, 각 좌표를 Integer 형으로 변환시켜 인식시켜 줄 네임 스페이스입니다.
1 | System.Runtime.InteropServices | cs |
그리고 스크린 캡쳐를 위한 좌표 계산 API를 선언합니다.
1 2 3 4 5 6 7 8 9 10 11 12 | [DllImport("user32.dll", ExactSpelling = true, SetLastError = true)] public static extern IntPtr GetDC(IntPtr hWnd); [DllImport("user32.dll", ExactSpelling = true)] public static extern IntPtr ReleaseDC(IntPtr hWnd, IntPtr hDC); [DllImport("gdi32.dll", ExactSpelling = true)] public static extern IntPtr BitBlt(IntPtr hDestDC, int x, int y, int nWidth, int nHeight, IntPtr hSrcDC, int xSrc, int ySrc, int dwRop); [DllImport("user32.dll", EntryPoint = "GetDesktopWindow")] public static extern IntPtr GetDesktopWindow(); | cs |
위에 선언한 함수를 이용해 C# 윈폼 "ScreenShot" 스크린샷 생성이 가능해집니다.
다만, 전체 스크린샷이지 일부 스크린샷은 아닙니다. 프로그램 실행 후 화면 아래 Save 버튼을 누르면 아래 코드가 실행됩니다.
C# Picture Box(픽처 박스)를 이용해 현재 화면을 이미지로 저장하죠.
1 2 3 4 5 6 7 8 | private void btnSave_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == DialogResult.OK) { pictureBox1.Image.Save(saveFileDialog1.FileName, System.Drawing.Imaging.ImageFormat.Bmp); } } | cs |
코드는 간단합니다.
C# 윈폼 예제의 핵심은 아래 ScreenShot 클래스입니다. IntPtr을 이용해 윈도우 API의 DC 함수를 호출하여, 비트맵을 생성하죠. 이 클래스는 이렇게 생성된 스크린 캡쳐 이미지를 반환합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | internal class ScreenShot { public static Bitmap take() { int screenWidth = Screen.PrimaryScreen.Bounds.Width; int screenHeight = Screen.PrimaryScreen.Bounds.Height; Bitmap screenBmp = new Bitmap(screenWidth, screenHeight); Graphics g = Graphics.FromImage(screenBmp); IntPtr dc1 = API.GetDC(API.GetDesktopWindow()); IntPtr dc2 = g.GetHdc(); //Main drawing, copies the screen to the bitmap //last number is the copy constant API.BitBlt(dc2, 0, 0, screenWidth, screenHeight, dc1, 0, 0, 13369376); //Clean up API.ReleaseDC(API.GetDesktopWindow(), dc1); g.ReleaseHdc(dc2); g.Dispose(); return screenBmp; } } | cs |
일단 프로그램 실행한 후 여러번 스크린 캡쳐하면서 감을 잡고, 그 뒤에 소스를 수정하여 입맛에 맞춰보세요.
C# 윈폼 예제, 스크린 캡쳐 소스 (화면 ScreenShot)
반응형