파워빌더에서 화면 캡처하기파워빌더에서 화면 캡처하기

Posted at 2010. 10. 3. 18:07 | Posted in PowerBuilder
반응형
파워빌더 자체에서 제공하는 함수가 따로 있는 것은 아닙니다.
파워빌더에서 직접 윈도우 API 를 호출하는 방법도 있지만
매우 복잡해져서, DLL 을 만들고 파워빌더에서는 간단하게
함수를 호출하는 형식으로 만들어봤습니다.

첫번째 argument 에 윈도우의 handle 을 넘겨주면 그 윈도우 만을 capture 하게 됩니다.
만약 파워빌더에서 다른 윈도우의 화면을 capture 하려고 한다면 그 윈도우의 handle 을
찾는 것은 별도로 구현하셔야 합니다.

첫번째 argument 에 0 을 주면 두번째 argument 에 지정된 모니터 화면 전체를 capture 합니다.
(멀티 모니터도 지원이 됩니다. 1 이 기본 모니터이며 2가 확장된 모니터입니다.
3개 이상의 모니터를 가지고 있을 경우 2, 3 이 어떤 것이 될지는 테스트되지 않았습니다.
테스트 후 프로그램에 반영하셔야 합니다.)

자세한 내용은 첨부한 소스를 보시면 됩니다.

PB 11.5 에서 만들어 졌으며, 하위 버전을 사용하시는 분들은 아래의 스크립트를 참조하십시요.

// external function
FUNCTION long pb_screencapture( unsignedlong hwnd, long whichMonitor, long imageType, long imageQuality, string filename, ref string msg ) library "pbscreen.dll" alias for "pb_screencapture;ansi"


// PowerBuidler scripts
boolean lb_checked
long ll_ret, ll_monitor_no, ll_imageType, ll_imageQuality
ulong lu_handle
string ls_filename, ls_msg, ls_imageType

// 저장될 파일 이름.
ls_filename = sle_3.text

// 에러가 발생했을 때, 메시지. 반드시 space 로 공간을 잡아주어야 한다.
ls_msg = space(1024)

// 현재의 윈도우만 capture 할 것인지의 여부를 묻는 체크박스
// 체크되지 않으면 monitor number 에 지정된 화면 전체를 capture.
lb_checked = cbx_1.checked

if lb_checked then
lu_handle = handle(parent)
else
lu_handle = 0
end if

// 윈도우만 capture 하는 것이 아닐 경우에만 사용. 모니터의 번호. 1 부터 시작.
// 1 은 기본 모니터를 뜻한다.
ll_monitor_no = long( sle_4.text )

// 그림의 형식. JPG, GIF, BMP 만 지원된다.
// JPG 가 가장 효율적임.
ls_imageType = ddlb_1.text
choose case ls_imageType
case "JPG"
ll_imageType = 1
case "GIF"
ll_imageType = 2
case "BMP"
ll_imageType = 3
end choose

// 100 : 가장 좋은 품질. 사이즈가 커진다.
// 1 : 가장 않좋은 품질. 사이즈가 작다.
// 50-80 사이의 값이면 화면을 알아보는데 지장이 없음.
ll_imageQuality = 50

ll_ret = pb_screencapture( lu_handle, ll_monitor_no, ll_imageType, ll_imageQuality, ls_filename, ls_msg )
MessageBox( string(ll_ret), ls_msg )
반응형

//