Что нового

[Окна, Диалоги] Получить фрагмент содержимого чужого окна

iahulg

Новичок
Сообщения
2
Репутация
0
Здравствуйте.
Понадобилось тут мне мониторить кусок окна на предмет появления заданного фрагмента. Причем делать это нужно вне зависимости от того, свернуто ли указанное окно или перекрыто другими. С 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 всего окна вырезать нужный произвольный кусок.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
iahulg
На эту тему:
http://autoit-script.ru/index.php?topic=10492.msg69418#msg69418
 
Автор
I

iahulg

Новичок
Сообщения
2
Репутация
0
WSWR
Насколько я понял, там сначала вызов того же PrintWindow для целого окна с последующим выделением нужной области из Bitmap с помощью BitBlt ? Эх, видимо, придется-таки снимать все окно сначала.
 
Верх