전체 페이지뷰

2015년 10월 21일 수요일

[세븐나이츠]오토핫키 프로그램 제작 5일차

오토핫키를 이용해서 만드는 세븐 나이츠 매크로

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일 끝
==========================================================


댓글 없음:

댓글 쓰기