Что нового

Смена вывода картинок по таймеру

perven1

Новичок
Сообщения
57
Репутация
0
здравствуйте.
Хочу задать технический вопрос по выводу изображения на экран.

Есть скрипт выводящий пнг-рисунок на экран.
В папке C:\14827\ лежат несколько png-рисунков.
Код:
#include <GDIPlus.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>

$sFilePath = @ScriptDir & "\картинка1.png"
If Not FileExists($sFilePath) Then Exit MsgBox(0, "Ошибка", "Файл не найден")

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFilePath)
$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))
GUISetState()
_WinAPI_UpdateLayeredWindowEx($hGUI, -1, -1, $hBitmap, 255, 1)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

Do
Until GUIGetMsg() = -3
Как заставить этот скрипт выводить рисунок - каждые 10 секунд картинку из папки C:\14827\ в порядке возрастания с повтором цикла ?
 

Вложения

InnI

AutoIT Гуру
Сообщения
4 434
Репутация
1 200
perven1
Как заставить этот скрипт выводить рисунок - каждые 10 секунд картинку из папки C:\14827\ в порядке возрастания с повтором цикла ?
1. Получить список файлов из папки.
2. Отсортировать.
3. Организовать цикл.
4. Использовать фрагмент скрипта для вывода картинки в цикле.
5. Ожидать 10 секунд.
 
Автор
P

perven1

Новичок
Сообщения
57
Репутация
0
InnI , добавил таймер.
Получил список файлов из папки.

Получился вот такой код:
Код:
#include <GDIPlus.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <File.au3>

$iCount = 0
$iTimeOut = 10*60*1000/600 ; 10 min
HotKeySet('{Esc}', '_Exit')
$iStart = TimerInit()
While 1
    If TimerDiff($iStart) > $iTimeOut Then
        _My_Func2()
        $iStart = TimerInit()
    EndIf
    Sleep(50)
WEnd

Func _My_Func2()

Local $sDir = 'c:\14827\' ; Папка
Local $sFileType = '*.png' ; Расширения файлов для поиска
Local $hGUI, $aFiles, $sRunFile, $hActive
$sFilePath = $sDir & $sFileType
If Not FileExists($sFilePath) Then Exit MsgBox(0, "Ошибка", "Файл не найден")

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFilePath)
$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))
GUISetState()
_WinAPI_UpdateLayeredWindowEx($hGUI, -1, -1, $hBitmap, 255, 1)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

Do
Until GUIGetMsg() = -3
EndFunc   ;==>_My_Func
Но он не работает.

Просто висит в трее и ничего не выводит
 

InnI

AutoIT Гуру
Сообщения
4 434
Репутация
1 200
perven1
Получил список файлов из папки
Где? Можете этот список показать? Или хотя бы отобразить имя первого файла?

И обратите внимание на цикл в конце функции _My_Func2.
 

Tempo

Скриптер
Сообщения
568
Репутация
181
perven1 сказал(а):
InnI , добавил таймер.
Получил список файлов из папки.

Получился вот такой код:
Код:
#include <GDIPlus.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#include <File.au3>

$iCount = 0
$iTimeOut = 10*60*1000/600 ; 10 min
HotKeySet('{Esc}', '_Exit')
$iStart = TimerInit()
While 1
    If TimerDiff($iStart) > $iTimeOut Then
        _My_Func2()
        $iStart = TimerInit()
    EndIf
    Sleep(50)
WEnd

Func _My_Func2()

Local $sDir = 'c:\14827\' ; Папка
Local $sFileType = '*.png' ; Расширения файлов для поиска
Local $hGUI, $aFiles, $sRunFile, $hActive
$sFilePath = $sDir & $sFileType
If Not FileExists($sFilePath) Then Exit MsgBox(0, "Ошибка", "Файл не найден")

_GDIPlus_Startup()
$hImage = _GDIPlus_ImageLoadFromFile($sFilePath)
$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))
GUISetState()
_WinAPI_UpdateLayeredWindowEx($hGUI, -1, -1, $hBitmap, 255, 1)
_WinAPI_DeleteObject($hBitmap)
_GDIPlus_ImageDispose($hImage)
_GDIPlus_Shutdown()

Do
Until GUIGetMsg() = -3
EndFunc   ;==>_My_Func
Но он не работает.

Просто висит в трее и ничего не выводит
Вот вам пример

Код:
#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, "*.png", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_SORT, $FLTAR_FULLPATH)
If @error Then Exit MsgBox(0, "Ошибка " & @error, "Файлы не найдены")
_ArrayDisplay($aPNGsList)
_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) >= 10000 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
 
Автор
P

perven1

Новичок
Сообщения
57
Репутация
0
Tempo , все работает идеально.
Огромное спасибо.
 
Верх