Что нового

Сделать скрин процесса копирования до закрытия окна процесса (приблизительно на 99%)

DyadyaGenya

Знающий
Сообщения
300
Репутация
10
Пробую сделать скрин окна процесса копирования файлов. Окно получилось отловить, скрин тоже делается. Но делается на 100% и там уже нет данных графика изменения скорости загрузки. А нужно в момент, когда ещё есть график. Установка в ноль задержки не помагает. Пробовал так:
Код:
#include <WinAPI.au3>
#include <WindowsConstants.au3>
#Include <ScreenCapture.au3>

$Shell = ObjCreate('Shell.Application')
$Shell.NameSpace('Source').CopyHere('Dist', 16)

$hWnd = WinWait("[class:OperationStatusWindow]", "", 0)
If Not $hWnd Then
    MsgBox(4096, 'Сообщение', 'Окно не найдено, завершаем работу скрипта')
    Exit
 Else
    $hWnd = WinGetHandle("[CLASS:OperationStatusWindow]")

$aWinPos = WinGetPos($hWnd)
WinMove($hWnd, "", 300, $aWinPos[1])

$hDC = _WinAPI_GetWindowDC($hWnd)
$hMemDC = _WinAPI_CreateCompatibleDC($hDC)

$hBitmap = _WinAPI_CreateCompatibleBitmap($hDC, $aWinPos[2], $aWinPos[3])
_WinAPI_SelectObject($hMemDC, $hBitmap)

_Print($hWnd, $hMemDC)

_WinAPI_DeleteDC($hMemDC)
_WinAPI_ReleaseDC($hWnd, $hDC)

Dim $sFile = @ScriptDir & "\capture.jpg"

_ScreenCapture_SaveImage($sFile, $hBitmap)
ShellExecute($sFile)

 EndIf

Func _Print($hWnd, $hMemDC, $iFlag = 0)
    $aRet = DllCall("User32.dll", "int", "PrintWindow", _
                                         "hwnd", $hWnd, _
                                         "hwnd", $hMemDC, _
                                         "int", $iFlag)
    Return $aRet[0]
EndFunc   ;==>_Print

Сообщение автоматически объединено:

Заменил две строки (8-9) на эту
Код:
If Not WinExists("[class:OperationStatusWindow]") Then
. Получилось заскринить на 99%. Но все равно окно пустое.
 

Вложения

  • capture.jpg
    capture.jpg
    47.6 КБ · Просмотры: 7
Последнее редактирование:
Верх