Здравствуйте.
Понадобилось тут мне мониторить кусок окна на предмет появления заданного фрагмента. Причем делать это нужно вне зависимости от того, свернуто ли указанное окно или перекрыто другими. С AutoIt раньше знаком не был, но все же погуглил пару дней, порылся в примерах и выудил вот такую вот функцию:
В данном случае используется вызов PrintWindow как единственный (из того, что нарылось) работающий вариант получить содержимое перекрытого окна. Для свернутых, правда, не работает, но я добавил проверку и Restore целевого окна на этот случай. Тут не критично.
А теперь собственно вопрос: можно ли как-нибудь таким же способом получать не всю клиентскую область окна, а только кусок ?
Причем кусок этот начинается не из верхнего левого угла, чтобы можно было нужные width/height передать имеющейся функции. Потому что все окно раз в 10 больше, чем интересующая область. Не очень быстро выйдет в цикле обновлять.
Спасибо !
P.S: если-таки не получится, буду отдельно очень благодарен за подсказку, как из имеющегося bitmap всего окна вырезать нужный произвольный кусок.
Понадобилось тут мне мониторить кусок окна на предмет появления заданного фрагмента. Причем делать это нужно вне зависимости от того, свернуто ли указанное окно или перекрыто другими. С AutoIt раньше знаком не был, но все же погуглил пару дней, порылся в примерах и выудил вот такую вот функцию:
Код:
Func _WinCapture($hWnd, $iWidth=-1, $iHeight=-1)
Local $iH, $iW, $hDDC, $hCDC, $hBMP
if $iWidth = -1 Then $iWidth = _WinAPI_GetWindowWidth($hWnd)
if $iHeight = -1 Then $iHeight = _WinAPI_GetWindowHeight($hWnd)
$hDDC = _WinAPI_GetDC($hWnd)
$hCDC = _WinAPI_CreateCompatibleDC($hDDC)
$hBMP = _WinAPI_CreateCompatibleBitmap($hDDC, $iWidth, $iHeight)
_WinAPI_SelectObject($hCDC, $hBMP)
DllCall("User32.dll","int","PrintWindow","hwnd",$hWnd,"hwnd",$hCDC,"int",1)
_WinAPI_ReleaseDC($hWnd, $hDDC)
_WinAPI_DeleteDC($hCDC)
Return $hBMP
EndFunc
В данном случае используется вызов PrintWindow как единственный (из того, что нарылось) работающий вариант получить содержимое перекрытого окна. Для свернутых, правда, не работает, но я добавил проверку и Restore целевого окна на этот случай. Тут не критично.
А теперь собственно вопрос: можно ли как-нибудь таким же способом получать не всю клиентскую область окна, а только кусок ?
Причем кусок этот начинается не из верхнего левого угла, чтобы можно было нужные width/height передать имеющейся функции. Потому что все окно раз в 10 больше, чем интересующая область. Не очень быстро выйдет в цикле обновлять.
Спасибо !
P.S: если-таки не получится, буду отдельно очень благодарен за подсказку, как из имеющегося bitmap всего окна вырезать нужный произвольный кусок.