Добрый день, специалисты autoit.
Помогите разобраться.
Есть скрипт, быстро меняющий картинки выводимые на экран - зацикливая эту операцию.
Однако заметно, что при обычной смене картинок - временной промежуток один, а при заходе цикла - на повтор - временной промежуток - другой, несколько больший.
Таким образом при зацикливании операции происходит временной лаг, который хорошо виден при работе скрипта (визуально - происходит небольшой рывок).
Подскажите как выровнять временные интервалы - для обычной смены картинок и для момента захода на новый цикл ?
(Чтобы визуально - не было заметно рывка в конце цикла.)
Помогите разобраться.
Есть скрипт, быстро меняющий картинки выводимые на экран - зацикливая эту операцию.
Однако заметно, что при обычной смене картинок - временной промежуток один, а при заходе цикла - на повтор - временной промежуток - другой, несколько больший.
Таким образом при зацикливании операции происходит временной лаг, который хорошо виден при работе скрипта (визуально - происходит небольшой рывок).
Подскажите как выровнять временные интервалы - для обычной смены картинок и для момента захода на новый цикл ?
(Чтобы визуально - не было заметно рывка в конце цикла.)
Код:
#include <File.au3>
#include <Array.au3>
#include <GDIPlus.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
Opt("TrayAutoPause", 0)
OnAutoItExitRegister("_OnExit")
$sPNGsPath = @ScriptDir
$aPNGsList = _FileListToArrayRec($sPNGsPath, "*.jpg", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
If @error Then Exit MsgBox(0, "Ошибка " & @error, "Файлы не найдены")
_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($aPNGsList[1])
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$hGUI = GUICreate("", _GDIPlus_ImageGetWidth($hImage), _GDIPlus_ImageGetHeight($hImage), -1, -1, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_TOPMOST, $WS_EX_TOOLWINDOW))
_WinAPI_UpdateLayeredWindowEx($hGUI, -1, -1, $hBitmap, 255, 1)
GUISetState()
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
$hTimer = TimerInit()
If $aPNGsList[0] > 1 Then
$iCounter = 2
Else
$iCounter = 1
EndIf
Do
If TimerDiff($hTimer) >= 100 Then
$hImage = _GDIPlus_ImageLoadFromFile($aPNGsList[$iCounter])
$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
$iWidth = _GDIPlus_ImageGetWidth($hImage)
$iHeight = _GDIPlus_ImageGetHeight($hImage)
_WinAPI_UpdateLayeredWindowEx($hGUI, -1, -1, $hBitmap, 255, 1)
;Для центрирования окна при любом размере изображения
;$iWidth = _GDIPlus_ImageGetWidth($hImage)
;$iHeight = _GDIPlus_ImageGetHeight($hImage)
;_WinAPI_UpdateLayeredWindowEx($hGUI, @DesktopWidth / 2 - $iWidth / 2, @DesktopHeight / 2 - $iHeight / 2, $hBitmap, 255, 1)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
$iCounter += 1
If $iCounter > $aPNGsList[0] Then $iCounter = 1
$hTimer = TimerInit()
EndIf
Until GUIGetMsg() = -3
Func _OnExit()
_GDIPlus_Shutdown()
EndFunc