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

Posted at 2013. 9. 2. 14:25 | 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 )




20100504165026_wer_pbscreen_capture.zip


반응형

//