테일스타 :?http://tailstar.net/432315
원문 포럼 :?http://www.autohotkey.com/board/topic/38414-pixelcolorx-y-window-transp-off-screen-etc-windows/
함수 원본
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)?
}
테스트용 구이에선 색값을 찾으나,?지니,블택,게임 등에서 못찾습니다.
CreateCompatibleBitmap(hdc, w, h) {
return DllCall("CreateCompatibleBitmap", UInt, hdc, Int, w, Int, w)
}
위 함수에서 마지막에 h가 들어가야 하는거 아닌가요?
return DllCall("CreateCompatibleBitmap", UInt, hdc, Int, w, Int, h)
포럼에서 2009년부터 2011까지 여러번 원문을 인용하면서 토론을 벌였는데, 이거에 대해 언급하는 사람이 없네요.
지니등에서 제대로 활용할수 있게 고수분의 도움을 바랍니다.
비활성픽셀서치 안됩니다.