Что нового

Захват окна с поддержкой прокрутки

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Мне стало интересно, как можно сделать снимок окна, учитывая его прокручиваемость?

Вот тут пишут что нужно как то использовать WM_PAINT/WM_PRINT/WM_PRINTCLIENT и т.п., но как именно я так и не понял :scratch:.

Также на оф. форуме нашёл кое что интересное (вроде рабочий вариант на дельфи), попробовал из кусков что там выкладывали собрать рабочий вариант:

Код:
#include <StructureConstants.au3>
#include <ScrollBarConstants.au3>
#include <GUiScrollBars.au3>
#include <SendMessage.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

$hWin = WinGetHandle("[CLASS:SciTEWindow]")
$hCtrl = ControlGetHandle($hWin, "", "Scintilla1")

$ThumbTop = _GUIScrollBars_GetScrollBarXYThumbTop($hCtrl, $OBJID_VSCROLL)
$Width = _WinAPI_GetClientWidth($hCtrl)
$Height = _WinAPI_GetClientHeight($hCtrl) ;_GetWndHeight($hCtrl) ;Get correct height of the scrolled ctrl

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

$BufWidth = $Width
$BufHeight = $Height / 2

$hDC = _WinAPI_GetDC($hCtrl)
$hCDC = _WinAPI_CreateCompatibleDC($hDC)
$hBMP = _WinAPI_CreateCompatibleBitmap($hDC, $Width, $Height)
_WinAPI_SelectObject($hCDC, $hBMP)

_WinAPI_BitBlt($hCDC, 0, 0, $BufWidth, $Height / 2, $hDC, 0, 0, BitOR($SRCCOPY, $CAPTUREBLT))
_WinAPI_MoveTo($hDC, 0, $Height/2)
_WinAPI_LineTo($hDC, 3, $Height/2)

Do
	$AlineHeight = NextLineHeight($hCtrl) + 1
	$BufHeight += $AlineHeight
	_WinAPI_BitBlt($hCDC, 0, $BufHeight - $AlineHeight, $BufWidth, $AlineHeight, $hDC, 0, ($Height / 2) - $AlineHeight, BitOR($SRCCOPY, $CAPTUREBLT))
	_WinAPI_MoveTo($hDC, 0, $Height/2)
	_WinAPI_LineTo($hDC, 3, $Height/2)
	_SendMessage($hCtrl, $WM_VSCROLL, $SB_LINEDOWN, 0)
	;Sleep(10)
Until IsScrollEnd($hCtrl)

$AlineHeight = $Height - ($Height / 2)
$BufHeight += $AlineHeight
_WinAPI_BitBlt($hCDC, 0, $BufHeight - $AlineHeight, $BufWidth, $AlineHeight, $hDC, 0, ($Height / 2) + 1, BitOR($SRCCOPY, $CAPTUREBLT))

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

_WinAPI_ReleaseDC($hCtrl, $hDC)
_WinAPI_DeleteDC($hCDC)
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
_GDIPlus_ImageSaveToFile($hImage, @DesktopDir & "\TestCapture.bmp")
_GDIPlus_Shutdown()
_WinAPI_DeleteObject($hBMP)

Func _GetWndHeight($hWin)
	_SendMessage($hWin, $WM_VSCROLL, $SB_TOP, 0)
	
	Local $iHeight = _WinAPI_GetClientHeight($hWin)
	Local $iRet = $iHeight
	
	While Not IsScrollEnd($hWin)
		_SendMessage($hWin, $WM_VSCROLL, $SB_LINEDOWN, 0)
		$iRet += 16
	WEnd
	
	_SendMessage($hWin, $WM_VSCROLL, $SB_TOP, 0)
	
	Return $iRet
EndFunc

Func NextLineHeight($hCtrl)
	Local $ThumbTopNow, $LineHeight
	$ThumbTopNow = _GUIScrollBars_GetScrollBarXYThumbTop($hCtrl, $OBJID_VSCROLL)
	$LineHeight = $ThumbTopNow - $ThumbTop
	;ConsoleWrite($LineHeight & @CRLF)
	Return $LineHeight
	
	_WinAPI_BitBlt($hCDC, 0, 0, 3, $Height, $hDC, 0, 0, $SRCCOPY)
	
	Local $Result = 0
	Local Const $TAGCOLOR = 0x00FEFEFE
	
	For $i = $BufHeight - 1 To 0 Step -1
		If _WinAPI_GetPixel($hDC, 2, $i) = $TAGCOLOR Then ExitLoop
		$Result += 1
	Next
	
	Return $Result
EndFunc

Func IsScrollEnd($hCtrl)
	Local $nPos, $nMax, $nPage
	
	$nPos = _GUIScrollBars_GetScrollInfoPos($hCtrl, $SB_VERT)
	$nMax = _GUIScrollBars_GetScrollInfoMax($hCtrl, $SB_VERT)
	$nPage = _GUIScrollBars_GetScrollInfoPage($hCtrl, $SB_VERT)
	
	Return $nPos == ($nMax - $nPage)
EndFunc


Но что то всё не то :stars:
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Вот так у меня работает
Код:
#include <StructureConstants.au3>
#include <ScrollBarConstants.au3>
#include <GUiScrollBars.au3>
#include <SendMessage.au3>
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

$hWin = WinGetHandle("[CLASS:SciTEWindow]")
$hCtrl = ControlGetHandle($hWin, "", "Scintilla1")
$LineHeight = 16

$ThumbTop = _GUIScrollBars_GetScrollBarXYThumbTop($hCtrl, $OBJID_VSCROLL)
$Width = _WinAPI_GetClientWidth($hCtrl)
$Height = _WinAPI_GetClientHeight($hCtrl)

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

$BufWidth = $Width
$BufHeight = _GetWndHeight($hCtrl)

$hDC = _WinAPI_GetDC($hCtrl)
$hCDC = _WinAPI_CreateCompatibleDC($hDC)
$hBMP = _WinAPI_CreateSolidBitmap(Null, 0xFEFEFE, $Width, $BufHeight, True)
_WinAPI_SelectObject($hCDC, $hBMP)

_WinAPI_BitBlt($hCDC, 0, 0, $BufWidth, $Height, $hDC, 0, 0, BitOR($SRCCOPY, $CAPTUREBLT))
$AlineHeight = 0
Do
    _WinAPI_BitBlt($hCDC, 0,$AlineHeight, $BufWidth, $LineHeight, $hDC, 0, $LineHeight, BitOR($SRCCOPY, $CAPTUREBLT))
	_SendMessage($hCtrl, $WM_VSCROLL, $SB_LINEDOWN, 0)
    $AlineHeight += 16
Until IsScrollEnd($hCtrl)

$pos = 0
Do
	_WinAPI_BitBlt($hCDC, 0, $AlineHeight + $pos, $BufWidth, $LineHeight, $hDC, 0, $pos+16, BitOR($SRCCOPY, $CAPTUREBLT))
	$pos += 16
Until $BufHeight <= ($AlineHeight + $pos)

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

_WinAPI_ReleaseDC($hCtrl, $hDC)
_WinAPI_DeleteDC($hCDC)
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
_GDIPlus_ImageSaveToFile($hImage, "TestCapture.bmp")
_GDIPlus_Shutdown()
_WinAPI_DeleteObject($hBMP)

Func _GetWndHeight($hWin)
    _SendMessage($hWin, $WM_VSCROLL, $SB_TOP, 0)

    Local $iHeight = _WinAPI_GetClientHeight($hWin)
    Local $iRet = $iHeight

    While Not IsScrollEnd($hWin)
        _SendMessage($hWin, $WM_VSCROLL, $SB_LINEDOWN, 0)
        $iRet += 16
    WEnd
	$iRet -=16
    _SendMessage($hWin, $WM_VSCROLL, $SB_TOP, 0)

    Return $iRet
EndFunc

Func IsScrollEnd($hCtrl)
    Local $nPos, $nMax, $nPage

    $nPos = _GUIScrollBars_GetScrollInfoPos($hCtrl, $SB_VERT)
    $nMax = _GUIScrollBars_GetScrollInfoMax($hCtrl, $SB_VERT)
    $nPage = _GUIScrollBars_GetScrollInfoPage($hCtrl, $SB_VERT)

    Return $nPos == ($nMax - ($nPage-1))
EndFunc
Но нужно было бы вычислять высоту строки (в обоих примерах 16px). Путем сравнения изображения, например.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Вариант CreatoR`а:
1. Прокрутка вверху.
1. Прокрутка внизу.

Вариант Z_Lenar`а:
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Добавил расчет высоты строки
Код:
#include <GUiScrollBars.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

$hWin = WinGetHandle("[CLASS:SciTEWindow]")
WinWaitActive($hWin)
$hCtrl = ControlGetHandle($hWin, "", "Scintilla1")
$LineHeight = GetLineHeight($hCtrl, 2)

$Width = _WinAPI_GetClientWidth($hCtrl)
$Height = _WinAPI_GetClientHeight($hCtrl)

$BufWidth = $Width
$BufHeight = _GetWndHeight($hCtrl)

$hDC = _WinAPI_GetDC($hCtrl)
$hCDC = _WinAPI_CreateCompatibleDC($hDC)
$hBMP = _WinAPI_CreateSolidBitmap(Null, 0xFEFEFE, $Width, $BufHeight, True)
_WinAPI_SelectObject($hCDC, $hBMP)

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

$AlineHeight = 0
Do
	_WinAPI_BitBlt($hCDC, 0, $AlineHeight, $BufWidth, $LineHeight, $hDC, 0, 0, BitOR($SRCCOPY, $CAPTUREBLT))
	_SendMessage($hCtrl, $WM_VSCROLL, $SB_LINEDOWN, 0)
	$AlineHeight += $LineHeight
Until IsScrollEnd($hCtrl)

$pos = 0
Do
	_WinAPI_BitBlt($hCDC, 0, $AlineHeight + $pos, $BufWidth, $LineHeight, $hDC, 0, $pos, BitOR($SRCCOPY, $CAPTUREBLT))
	$pos += $LineHeight
Until $BufHeight <= ($AlineHeight + $pos)

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

_WinAPI_ReleaseDC($hCtrl, $hDC)
_WinAPI_DeleteDC($hCDC)
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
_GDIPlus_ImageSaveToFile($hImage, "TestCapture.bmp")
_GDIPlus_Shutdown()
_WinAPI_DeleteObject($hBMP)

Func _GetWndHeight($hWin)
	_SendMessage($hWin, $WM_VSCROLL, $SB_TOP, 0)

	Local $iHeight = _WinAPI_GetClientHeight($hWin)
	Local $iRet = $iHeight

	While Not IsScrollEnd($hWin)
		_SendMessage($hWin, $WM_VSCROLL, $SB_LINEDOWN, 0)
		$iRet += $LineHeight
	WEnd
	_SendMessage($hWin, $WM_VSCROLL, $SB_TOP, 0)

	Return $iRet
EndFunc   ;==>_GetWndHeight

Func IsScrollEnd($hCtrl)
	Local $nPos, $nMax, $nPage

	$nPos = _GUIScrollBars_GetScrollInfoPos($hCtrl, $SB_VERT)
	$nMax = _GUIScrollBars_GetScrollInfoMax($hCtrl, $SB_VERT)
	$nPage = _GUIScrollBars_GetScrollInfoPage($hCtrl, $SB_VERT)

	Return $nPos == ($nMax - ($nPage - 1))
EndFunc   ;==>IsScrollEnd

Func GetLineHeight($hWnd, $off, $h = 5)
	Local $aPos = WinGetPos($hWnd), $aChkLine[$aPos[3] - $aPos[1]]
	_SendMessage($hWnd, $WM_VSCROLL, $SB_TOP, 0)
	For $i = 0 To UBound($aChkLine) - 1
		$aChkLine[$i] = PixelChecksum($aPos[0], $aPos[1] + $i + $off, $aPos[2], $aPos[1] + $i + $h, 1, $hWnd)
	Next
	_SendMessage($hWnd, $WM_VSCROLL, $SB_LINEDOWN, 0)
	Local $ret = 0
	Local $chk = PixelChecksum($aPos[0], $aPos[1] + $off, $aPos[2], $aPos[1] + $h, 1, $hWnd)
	While $ret < UBound($aChkLine) - 1
		If $chk = $aChkLine[$ret] Then
			ConsoleWrite('Line height: ' & $ret & @CRLF)
			ExitLoop
		EndIf
		$ret += 1
	WEnd
	Return $ret
EndFunc   ;==>GetLineHeight
В SciTE работает. В AlelPad не совпадает чексумма. :(
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
CreatoR
Может из-за того что не поставил Opt('PixelCoordMode', 2) ?
Приходит на ум еще вариант с увеличением размеров клиентской области до исчезновения скроллбаров, но как это все потом скопировать в свой DC непонятно. WM_PAINT - приводит к исключению "Access Violation".

В любом случае проще скриншотить постранично на диск, затем сшивать это все в один файл.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Z_Lenar [?]
В любом случае проще скриншотить постранично на диск, затем сшивать это все в один файл.
Для меня это совсем не просто :smile:.
Как убедиться что при склеивании не будет повторов...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вот так работает:

Код:
#include <StructureConstants.au3>
#include <ScrollBarConstants.au3>
#include <GUiScrollBars.au3>
#include <SendMessage.au3>
#include <ScreenCapture.au3>
#include <WinAPIEx.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

$hWin = WinGetHandle("[CLASS:SciTEWindow]")
$hCtrl = ControlGetHandle($hWin, "", "Scintilla1")

If Not BitAND(_WinAPI_GetWindowLong($hCtrl, $GWL_STYLE), $WS_VSCROLL) Then
	Exit
EndIf

WinActivate($hWin)
WinWaitActive($hWin)

$LineHeight = 16
$Width = _WinAPI_GetClientWidth($hCtrl)
$Height = _WinAPI_GetClientHeight($hCtrl)

$BufWidth = $Width
$BufHeight = _GetWndHeight($hCtrl, $hWin)

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

$hDC = _WinAPI_GetDC($hCtrl)
$hCDC = _WinAPI_CreateCompatibleDC($hDC)
$hBMP = _WinAPI_CreateSolidBitmap(Null, 0xFEFEFE, $Width, $BufHeight, True)
_WinAPI_SelectObject($hCDC, $hBMP)

_WinAPI_BitBlt($hCDC, 0, 0, $BufWidth, $Height, $hDC, 0, 0, BitOR($SRCCOPY, $CAPTUREBLT))
$AlineHeight = 0

Do
    _WinAPI_BitBlt($hCDC, 0,$AlineHeight, $BufWidth, $LineHeight, $hDC, 0, $LineHeight, BitOR($SRCCOPY, $CAPTUREBLT))
    _SendMessage($hCtrl, $WM_VSCROLL, $SB_LINEDOWN, 0)
    $AlineHeight += 16
Until IsScrollEnd($hCtrl)

$pos = 0

Do
    _WinAPI_BitBlt($hCDC, 0, $AlineHeight + $pos, $BufWidth, $LineHeight, $hDC, 0, $pos+16, BitOR($SRCCOPY, $CAPTUREBLT))
    $pos += 16
Until $BufHeight <= ($AlineHeight + $pos)

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

_WinAPI_ReleaseDC($hCtrl, $hDC)
_WinAPI_DeleteDC($hCDC)
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
_GDIPlus_ImageSaveToFile($hImage, @DesktopDir & "\Test.bmp")
_GDIPlus_Shutdown()
_WinAPI_DeleteObject($hBMP)

Func _GetWndHeight($hWin, $hParent = 0)
	Local $aPos = ControlGetPos("", "", $hWin)
	Local $iPos = 0
	
    While BitAND(_WinAPI_GetWindowLong($hWin, $GWL_STYLE), $WS_VSCROLL) = $WS_VSCROLL
		$iPos += 100
        ControlMove("", "", $hWin, $aPos[0], $aPos[1], $aPos[2], $iPos)
    WEnd
    
	Local $iRet = _WinAPI_GetClientHeight($hWin) - 50
	
	ControlMove("", "", $hWin, $aPos[0], $aPos[1], $aPos[2], $aPos[3])
	_WinAPI_RedrawWindow($hParent, 0, 0, BitOR($RDW_INVALIDATE, $RDW_UPDATENOW, $RDW_ALLCHILDREN))
	
    Return $iRet
EndFunc

Func IsScrollEnd($hCtrl)
    Local $nPos, $nMax, $nPage

    $nPos = _GUIScrollBars_GetScrollInfoPos($hCtrl, $SB_VERT)
    $nMax = _GUIScrollBars_GetScrollInfoMax($hCtrl, $SB_VERT)
    $nPage = _GUIScrollBars_GetScrollInfoPage($hCtrl, $SB_VERT)

    Return $nPos == ($nMax - ($nPage-1))
EndFunc


Но опять же, это не надёжно, да и не везде можно вот так увеличить элемент с прокруткой.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
CreatoR [?]
Вот так работает:
Не буду выкладывать простыню, но у меня первые 2 строки 2 и 2 (иногда 2 3 3), потом правильно, далее 9 11 11 (или 7 9 9 11 11 12 14 14), дальше, вроде, все правильно, но в конце только примерно 10% 86-ой (или 85-й) строки (а всего строк у меня 87).
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ещё проблема (кроме самого захвата) - не все элементы работают со стандартной прокруткой.
Например браузер Opera, как определить что есть прокрутка и что она достигла завершения?

Я думаю не нужно проверять есть ли прокрутка или нет, или завершилась ли она, нужно просто сравнивать текущую захваченную линию с предыдущей, как то так...
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Вот тут есть статья о том как использовать WM_PRINT/WM_PRINTCLIENT, но я так и не осилил её :stars:.
 

Z_Lenar

Продвинутый
Сообщения
209
Репутация
52
Там перехват оконной процедуры + сплайсинг функций BeginPaint и EndPaint. Это будет работать если есть права администратора.

Переделанный предыдущий вариант:
Код:
#include <GUiScrollBars.au3>
#include <WindowsConstants.au3>
#include <GDIPlus.au3>

;$hWin = WinGetHandle("[CLASS:SciTEWindow]")
;$hWin = WinGetHandle("[CLASS:MSPaintApp]")
$hWin = WinGetHandle("[CLASS:HH Parent]")

WinWaitActive($hWin)
;$hCtrl = ControlGetHandle($hWin, "", "Scintilla1")
;$hCtrl = ControlGetHandle($hWin, "", "[CLASS:Afx:1000000:8; INSTANCE:1]")
$hCtrl = ControlGetHandle($hWin, "", "[CLASS:SysTreeView32; INSTANCE:1]")
_SendMessage($hWin, $WM_VSCROLL, $SB_TOP, 0)
$LineHeight = GetLineHeight($hCtrl, 20, 10, 20, 30)

$Width = _WinAPI_GetClientWidth($hCtrl)
$Height = _WinAPI_GetClientHeight($hCtrl)

$BufWidth = $Width
$page = _GUIScrollBars_GetScrollInfoPage($hCtrl, $SB_VERT)
$BufHeight = $Height * (Round((_GUIScrollBars_GetScrollInfoMax($hCtrl, $SB_VERT)) / $page, 0)+1);_GetWndHeight($hCtrl)

$hDC = _WinAPI_GetDC($hCtrl)
$hCDC = _WinAPI_CreateCompatibleDC($hDC)
$hBMP = _WinAPI_CreateSolidBitmap(Null, 0xFEFEFE, $Width, $BufHeight, True)
_WinAPI_SelectObject($hCDC, $hBMP)

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

$AlineHeight = 0
Do
	_WinAPI_BitBlt($hCDC, 0, $AlineHeight, $BufWidth, $LineHeight, $hDC, 0, 0, BitOR($SRCCOPY, $CAPTUREBLT))
	$AlineHeight += $LineHeight
	$LineHeight = GetLineHeight($hCtrl, 20, 10, 20, 30)
Until IsScrollEnd($hCtrl)

_WinAPI_BitBlt($hCDC, 0, $AlineHeight, $BufWidth, $Height, $hDC, 0, 0, BitOR($SRCCOPY, $CAPTUREBLT))

_SendMessage($hCtrl, $WM_VSCROLL, $SB_TOP, 0)

_WinAPI_ReleaseDC($hCtrl, $hDC)
_WinAPI_DeleteDC($hCDC)
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBMP)
_GDIPlus_ImageSaveToFile($hImage, "TestCapture.bmp")
_GDIPlus_Shutdown()
_WinAPI_DeleteObject($hBMP)


Func IsScrollEnd($hCtrl)
	Local $nPos, $nMax, $nPage

	$nPos = _GUIScrollBars_GetScrollInfoPos($hCtrl, $SB_VERT)
	$nMax = _GUIScrollBars_GetScrollInfoMax($hCtrl, $SB_VERT)
	$nPage = _GUIScrollBars_GetScrollInfoPage($hCtrl, $SB_VERT)

	Return $nPos == ($nMax - ($nPage - 1))
EndFunc   ;==>IsScrollEnd

Func GetLineHeight($hWnd, $offx = 3, $offy = 3, $h = 20, $lines = 50)
	Local Static $aPos = ControlGetPos('', '', $hWnd), $aChkLine[$lines]
	Opt('PixelCoordMode', 2)
	If IsScrollEnd($hCtrl) Then Return 0
	For $i = 0 To UBound($aChkLine) - 1
		$aChkLine[$i] = PixelChecksum($offx + $aPos[0], $aPos[1] + $i + $offy, $aPos[2] - $offx * 2, $aPos[1] + $i + $h + $offy, 1, $hWnd)
	Next
	_SendMessage($hWnd, $WM_VSCROLL, $SB_LINEDOWN, 0)
	Local $ret = 0
	Local $chk = PixelChecksum($offx + $aPos[0], $aPos[1] + $offy, $aPos[2] - $offx * 2, $aPos[1] + $h + $offy, 1, $hWnd)
	While $ret < UBound($aChkLine)
		If $chk = $aChkLine[$ret] Then
			ConsoleWrite('Line height: ' & $ret & @CRLF)
			ExitLoop
		EndIf
		$ret += 1
	WEnd
	Opt('PixelCoordMode', 1)
	If $ret = UBound($aChkLine) Then
		ConsoleWrite("!>Can't determine line height" & @CRLF)
	EndIf
	Return $ret
EndFunc   ;==>GetLineHeight
При этом _GUIScrollBars_GetScrollInfoPage вызываемая к встроенному компоненту IE возвращает 0.
Наверное действительно будет проще сравнивать предыдущую скопированную клиентскую область. И для скорости копировать не построчно а постранично.
 

Вложения

  • TestCapture.PNG
    TestCapture.PNG
    49.9 КБ · Просмотры: 13

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Для сравнения скринов можно переводить их в текстовые строки и искать соответствие с помощью StringInStr
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Z_Lenar
Нужно исключить использование функции связанные с сообщением прокрутки ($WM_VSCROLL/$SB_VERT и т.п.), многие окна на них не реагируют.
 
Верх