오토핫키를 이용해서 만드는 세븐 나이츠 매크로
2015년 10월 21일 시작
==========================================================
비활성을 위한 소스 중 하나.
PixelColor(pc_x, pc_y, pc_wID)
{
If pc_wID
{
pc_hDC := DllCall("GetDC", "UInt", pc_wID)
WinGetPos, , , pc_w, pc_h, ahk_id %pc_wID%
pc_hCDC := CreateCompatibleDC(pc_hDC)
pc_hBmp := CreateCompatibleBitmap(pc_hDC, pc_w, pc_h)
pc_hObj := SelectObject(pc_hCDC, pc_hBmp)
pc_hmCDC := CreateCompatibleDC(pc_hDC)
pc_hmBmp := CreateCompatibleBitmap(pc_hDC, 1, 1)
pc_hmObj := SelectObject(pc_hmCDC, pc_hmBmp)
DllCall("PrintWindow", "UInt", pc_wID, "UInt", pc_hCDC, "UInt", 0)
DllCall("BitBlt" , "UInt", pc_hmCDC, "Int", 0, "Int", 0, "Int", 1, "Int", 1, "UInt", pc_hCDC, "Int", pc_x, "Int", pc_y, "UInt", 0xCC0020)
pc_fmtI := A_FormatInteger
SetFormat, Integer, Hex
DllCall("GetBitmapBits", "UInt", pc_hmBmp, "UInt", VarSetCapacity(pc_bits, 4, 0), "UInt", &pc_bits)
pc_c := NumGet(pc_bits, 0)
SetFormat, Integer, %pc_fmtI%
DeleteObject(pc_hBmp), DeleteObject(pc_hmBmp)
DeleteDC(pc_hCDC), DeleteDC(pc_hmCDC)
DllCall("ReleaseDC", "UInt", pc_wID, "UInt", pc_hDC)
Return pc_c
}
}
CreateCompatibleDC(hdc=0) {
return DllCall("CreateCompatibleDC", "UInt", hdc)
}
CreateCompatibleBitmap(hdc, w, h) {
return DllCall("CreateCompatibleBitmap", UInt, hdc, Int, w, Int, w)
}
SelectObject(hdc, hgdiobj) {
return DllCall("SelectObject", "UInt", hdc, "UInt", hgdiobj)
}
DeleteObject(hObject) {
Return, DllCall("DeleteObject", "UInt", hObject)
}
DeleteDC(hdc) {
Return, DllCall("DeleteDC", "UInt", hdc)
}
검색을 하다 찾은 소스인데
특정 응용프로그램이 최소화 되어있지 않다면
원하는 위치의 Pixel 값을 가져오는 기능!
즉, 화면이 가려져도 Pixel 값을 가져올수 있지!
하지만... 여기서 큰 문제점은
시간이 너무 오래걸려 ㅠ_ㅠ
물론 범위를 주고 최소한의 범위를 주면 시간도 줄겠지
그래! 그래서 범위를 가로 100픽셀 세로 40픽셀만 줘봤지.
ㅋㅋㅋㅋㅋ 스캔시간이 8초나 걸린다고
어짜피 세븐나이츠는 2D게임이니깐 고정좌표로 할까..?
흠...
2015년 10월 21일 끝
==========================================================
댓글 없음:
댓글 쓰기