Автор Тема: [Окна, Диалоги] Получить фрагмент содержимого чужого окна  (Прочитано 2534 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн iahulg [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 0
  • Пол: Мужской
    • Награды
Здравствуйте.
Понадобилось тут мне мониторить кусок окна на предмет появления заданного фрагмента. Причем делать это нужно вне зависимости от того, свернуто ли указанное окно или перекрыто другими. С AutoIt раньше знаком не был, но все же погуглил пару дней, порылся в примерах и выудил вот такую вот функцию:

Код: 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 всего окна вырезать нужный произвольный кусок.

Русское сообщество AutoIt


Оффлайн WSWR [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 941
  • Репутация: 355
    • Награды
  • Версия AutoIt: 3.3.14.0

Оффлайн iahulg [?]

  • Новичок
  • *
  • Сообщений: 2

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

Русское сообщество AutoIt

Re: [Окна, Диалоги] Получить фрагмент содержимого чужого окна
« Ответ #2 Отправлен: Август 28, 2013, 19:25:00 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
4 Ответов
6079 Просмотров
Последний ответ Март 14, 2010, 16:20:33
от Yashied
11 Ответов
8179 Просмотров
Последний ответ Май 04, 2010, 20:59:47
от avmir
3 Ответов
5204 Просмотров
Последний ответ Ноябрь 28, 2010, 20:46:05
от Yashied
0 Ответов
3023 Просмотров
Последний ответ Ноябрь 28, 2010, 14:39:26
от Garrett
13 Ответов
5272 Просмотров
Последний ответ Сентябрь 12, 2011, 21:55:32
от Степан
5 Ответов
8997 Просмотров
Последний ответ Апрель 25, 2014, 09:35:09
от madmasles
17 Ответов
7107 Просмотров
Последний ответ Май 01, 2012, 01:06:34
от Dimmak
3 Ответов
4803 Просмотров
Последний ответ Октябрь 25, 2012, 09:27:24
от pekich
4 Ответов
2565 Просмотров
Последний ответ Ноябрь 30, 2013, 02:31:39
от Stos
0 Ответов
1480 Просмотров
Последний ответ Ноябрь 29, 2013, 21:11:54
от madmasles