Василиса Лукьянчикова
Новичок
- Сообщения
- 34
- Репутация
- 0
Здравствуйте, уважаемые специалисты по autoit.
Как снять скриншот с рабочей области программы Paint
Эта рабочая область большая и не влезает на экран, поэтому ее приходится прокручивать бегунком.
Имеющийся макрос AutoIt - делает скриншот рабочей области окна "Диспетчера задач". А вот с пайнтом подобный способ почему-то уже не работает.
Скажите - как снять скриншот с рабочей области программы Paint - полностью ?
Как снять скриншот с рабочей области программы Paint
Эта рабочая область большая и не влезает на экран, поэтому ее приходится прокручивать бегунком.
Имеющийся макрос AutoIt - делает скриншот рабочей области окна "Диспетчера задач". А вот с пайнтом подобный способ почему-то уже не работает.
Скажите - как снять скриншот с рабочей области программы Paint - полностью ?
Код:
#AutoIt3Wrapper_UseX64=Y
#RequireAdmin
#include <GuiHeader.au3>
#include <GuiListView.au3>
#include <ScreenCapture.au3>
$hWnd = WinActivate("Диспетчер задач Windows")
If Not $hWnd Then Exit MsgBox(0, "", "Окно не найдено")
$hHead = ControlGetHandle($hWnd, "", "SysHeader321")
$hList = ControlGetHandle($hWnd, "", "SysListView321")
If Not ControlCommand($hWnd, "", $hList, "IsVisible") Then Exit MsgBox(0, "", "Список не виден")
Sleep(555)
$aPosHead = _GUICtrlHeader_GetItemRect($hHead, 0)
$iHead = $aPosHead[3] - $aPosHead[1]
$aPosList = _GUICtrlListView_GetItemRect($hList, 0)
$iItem = $aPosList[3] - $aPosList[1]
$iCount = _GUICtrlListView_GetItemCount($hList)
_GDIPlus_Startup()
$hImage = _GDIPlus_BitmapCreateFromScan0($aPosList[2] - $aPosList[0], $iHead + $iItem * $iCount)
$hGraph = _GDIPlus_ImageGetGraphicsContext($hImage)
$hBmp = _ScreenCapture_CaptureWnd("", $hList, $aPosHead[0], $aPosHead[1], $aPosList[2], $aPosHead[3], False)
$hImg = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
_GDIPlus_GraphicsDrawImage($hGraph, $hImg, 0, 0)
_GDIPlus_BitmapDispose($hImg)
_WinAPI_DeleteObject($hBmp)
For $i = 0 To $iCount - 1
_GUICtrlListView_EnsureVisible($hList, $i)
$aPos = _GUICtrlListView_GetItemRect($hList, $i)
$hBmp = _ScreenCapture_CaptureWnd("", $hList, $aPos[0], $aPos[1], $aPos[2], $aPos[3], False)
$hImg = _GDIPlus_BitmapCreateFromHBITMAP($hBmp)
_GDIPlus_GraphicsDrawImage($hGraph, $hImg, 0, $iHead + $i * $iItem)
_GDIPlus_BitmapDispose($hImg)
_WinAPI_DeleteObject($hBmp)
Next
_GDIPlus_ImageSaveToFile($hImage, "ListView.png")
_GDIPlus_ImageDispose($hImage)
_GDIPlus_GraphicsDispose($hGraph)
_GDIPlus_Shutdown()