[C#] 스크롤 컨트롤 캡쳐프로그램
오픈캡쳐의 스크롤 캡쳐기능이 안된다고해서 캡쳐 프로그램을 간단히 만들어 봤다.



기능은 간단하다.

캡쳐위치찾기 버튼을 누르면 오픈캡쳐처럼 컨트롤에 가져다 델때마다 테두리가 그려진다.


(TOP PAID APPS페이지를 출력하는 컴포넌트를 선택한 상태이다)

컨트롤을 이곳저곳 옮겨다니면 캡쳐 컨트롤 정보에 마우스 커서 아래에 있는 컨트롤의 클래스 아이디를 출력한다.

캡쳐할 컨트롤이 선택됐으면 클릭을한다.

그리고서 캡쳐버튼을 누르면 스르륵 스크롤되면서 캡쳐하기 시작한다.

(이때 캡쳐할 화면이 가려져 있으면 안된다)

캡쳐가 끝나면 프로그레스바가 올라가기시작한다.

캡쳐한 이미지들을 합치는 과정을 하는것이다.

그리고서 끝나면 폼안에 PictureBox에 캡쳐한 이미지가 보인다.



저장...버튼을 누르면 어디 위치에 저장할지 뜨게된다.

파일이름을 지정하고 확인을 누르면 저장이된다.

저장할때 파일이름에 따라 포멧이 결정된다.

jpg,bmp,png등 포멧들을 지원한다.

---------------------

기능구현을 위해 참고한 API들을 보면

WindowFromPoint
GetCursorPos
GetClassName
GetWindowRect
SendMessage

그리고 핵심적인 객체와 매소드들

Graphics.CopyFromScreen // 스크린샷
ControlPaint.DrawReversibleFrame // 선택된 컨트롤에 프레임 그리기
Image.Save // 이미지 저장

시나리오는 다음과 같다.
GetCursorPos로 현재 마우스 위치를 알아내고
WindowFromPoint로 마우스아래에 있는 객체를 가져와서
GetClassName으로 객체 이름을 셋팅해주고
GetWindowRect로 컨트롤 위치를 알아낸다음에
ControlPaint.DrawReversibleFrame로 화면에 선택됐다고 표시를해준다.

Graphics.CopyFromScreen로 스크린샷을 찍고
SendMessage로 스크롤을 움직여준다.
- WM_KEYDOWN과 WM_KEYUP을 이용해서 아래 방향키를 누르도록했다.
- 오픈캡쳐에서는 스크롤바의 아래방향키를 누르는 것 같았다.

이미지를 적절히 합쳐주고..

합친 Bitmap객체를 Save로 저장해준다.

정리 끝~
 Track this back : http://skyilover.ruree.net/soojung/trackback.php?blogid=356
Commented by IRIS at 10/02/10 18:19
좋은 프로그램이군요! 이런건 공개하셔야~
근데 움직이고 있는 웹페이지를 캡쳐하려면 어떻게 해야 할까요?
가량 플래시 오브젝트가 있다던가.. ㅋㅋ
Commented by 치이 at 10/02/11 21:02
ㅎㅎ 그거슨... 몇픽셀 단위로 화면이 달라져서 캡쳐가 되지않을까요[!?]

Name   Email   Homepage