스크린샷 또는 마우스커서 이미지를 얻거나 파일에서 이미지를 로딩하는 명령어를 추가해 봤습니다.
그냥 DllCall 명령어로 만들어 쓸수 있지만 간편하게 써보려고 만들어 봤습니다.
ImageGet , hBitmapOutVar, [X1, Y1, X2, Y2, InputVar, *option, OutputVarObj]
[결과값]
ErrorLevel = 0 : 명령어 정상 실행
ErrorLevel = 1 : 명령어 실행 오류
[변수]
hBitmapOutVar : 캡춰되거나 파일에서 로딩한 비트맵데이터의 핸들이 저장되는 변수입니다.
(주의) 사용이 끝난 비트맵핸들의 초기화 필수 - DllCall("DeleteObject", Ptr,hBitmap)
InputVar : 파일에서 로딩하는경우 파일경로나 파일명이 저장된 변수입니다.
- 변수설정을 하지 않거나 변수에 설정된 값이 없는 경우 CoordMode, Pixel 설정에 따라 윈도우 또는 전체화면 캡쳐를 수행합니다.
OutputVarObj : 해당변수가 존재할시 hBitmapOutVar 출력 이미지의 {width, height} 값을 얻을수 있습니다.
[옵션]
*WH : X2, Y2를 가로 세로값(픽셀수)으로 사용합니다.
*CursorOnly : 커서이미지를 가져옵니다.
*ClearBack : 윈도우 캡춰시 뒤쪽 윈도우 잔상현상이 나타날시 사용하는 옵션입니다.
- CoordMode, Pixel, Relative( or Client) 모드 전용(전체화면 캡춰시엔 필요없는 옵션)
*HBmp : InputVar 변수 값이 HBITMAP 핸들임을 나타내며 명령어 사용후 자동으로 핸들 초기화됩니다.
*HBmpNotDel : InputVar 변수 값이 HBITMAP 핸들임을 나타내며 명령어 사용후에도 핸들이 유지됩니다.
*MemFile : 변수에 저장된 파일구조의 이미지를 비트맵으로 전환할때 사용합니다.
- 현재는 비트맵 파일과 adb에서 받아온 raw이미지 형태의 파일만 가능합니다.
- 로딩된 비트맵 파일구조에서 비트맵을 얻는 오토핫키 스크립트도 있으니 참고하세요.
*HWnd : 지정윈도우 캡쳐시 사용되며 InputVar 변수에 저장된 값을 HWND 핸들로 인식합니다.
*PrintWindow : 지정윈도우 캡쳐시 비활성 캡쳐가 가능하도록 합니다.
- AeroPeek 기능이 활성화된 상태여야 합니다.
- OpenGL 사용 윈도우의 경우 Win10 미만의 버전에서는 캡쳐가 되지 않을 수 있습니다.
*Channel[R|G|B] : 이미지의 RGB 채널을 선택할 수 있습니다. (ex. *ChannelR, *ChannelRB)
Test.ahk 파일을 다운로드한 'Ahk+ 전용 AutoHotkey.exe 파일' 위에 드래그해서 실행하세요.
사용예)
;액트브 윈도우 전체스샷
CoordMode, Pixel, Relative
ImageGet, hBitmap
SaveHBITMAPToFile(hBitmap, "1.액티브윈도우_전체.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;액티브 윈도우의 클라이언트 전체스샷
CoordMode, Pixel, Client
ImageGet, hBitmap
SaveHBITMAPToFile(hBitmap, "2.액티브윈도우_클라이언트영역.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;풀스크린샷
CoordMode, Pixel, Screen
ImageGet, hBitmap
SaveHBITMAPToFile(hBitmap, "3.스크린_전체.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;액티브윈도우의 선택영역 스크린샷
CoordMode, Pixel, Relative
ImageGet, hBitmap, 0,0,80,120
SaveHBITMAPToFile(hBitmap, "4.액티브윈도우_지정영역.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;마우스가 위치한 특정 윈도우의 클라이언트 영역 스크린샷
MouseGetPos,,, hwnd
CoordMode, Pixel, Client
ImageGet, hBitmap, 0,0,0,0, hwnd, *HWnd *PrintWindow
SaveHBITMAPToFile(hBitmap, "5.지정윈도우_클라이언트영역.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;커서 이미지 가져오기
ImageGet, hBitmap,,,,,, *CursorOnly
SaveHBITMAPToFile(hBitmap, "6.마우스커서.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;이미지 파일의 특정영역만 가져오기
imageFile = sample_image.bmp
ImageGet, hBitmap, 200, 150, 50, 30, imageFile, *WH, imageObj
SaveHBITMAPToFile(hBitmap, "7.sample_image_x200y150w50h30영역.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
MsgBox % "파일에서 읽어온 이미지 크기 = " imageObj.width "x" imageObj.height
*ClearBack 옵션 사용 예
이런 배치에서 블루스택 윈도우를...
아래 스크립으로 캡춰할 경우 뒤에 있는 윈도우 영향으로 잔상 또는 크랙 현상이 발생합니다.
(특정 윈도우환경에서만 나타날 수 있는 현상으로 일반적인 현상은 아닙니다.)
F1::
CoordMode, Pixel, Relative
ImageGet, hBitmap
SaveHBITMAPToFile(hBitmap, "1.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;SaveHBITMAPToFile() 함수는 첨부파일 스크립트에 있으므로 복사해서 테스트 하세요.
return
이런 경우 *ClearBack 옵션을 써주면 아래처럼 깔끔한 캡춰가 가능합니다.
단 명령어 수행속도가 대폭 느려지므로 깨짐현상이 발생하는 경우에만 사용을 권합니다.
F1::
CoordMode, Pixel, Relative
ImageGet, hBitmap,,,,,, *ClearBack
SaveHBITMAPToFile(hBitmap, "2.bmp")
DllCall("DeleteObject", Ptr,hBitmap)
;SaveHBITMAPToFile() 함수는 첨부파일 스크립트에 있으므로 복사해서 테스트 하세요.
return
'AHK+ 명령어' 카테고리의 다른 글
오토핫키+ PixelSearch 기능 확장 (17) | 2015.09.28 |
---|---|
오토핫키+ ImageCompare 명령어 추가 (8) | 2015.09.19 |
오토핫키+ CursorMatchTest 명령어 추가 (0) | 2015.09.18 |
오토핫키+ ColorReplace 명령어 추가 (0) | 2015.09.15 |
오토핫키+ ImageSearch 명령어 기능 확장 (8) | 2015.09.04 |