Что нового

Проблема с функцией _Timer_GetIdleTime()

lastangel

Новичок
Сообщения
39
Репутация
0
Версия AutoIt: v3.3.8.1

Описание:
Код:
#include <Timers.au3>
#Include <file.au3>
#Include <ClipBoard.au3>
#Include <GDIPlus.au3>


$start1 = TimerInit()

While 1 
    If TimerDiff($start1) > 3000 And _Timer_GetIdleTime() > 10000 Then
		 _ScreenCaptureEx(@ScriptDir & '\'& @HOUR & '_' & @MIN & '_' & @SEC & '   [' & @MDAY & '_' & @MON &']'&'.jpg')
        $start1 = TimerInit()
	 EndIf

WEnd



Func _ScreenCaptureEx($sFile, $bActiveWindow = False)
    Local $Result, $Timer, $aOld_Clip, $iFormat, $hImage, $hBitmap

    _ClipBoard_Open(0)

    Dim $aOld_Clip[_ClipBoard_CountFormats()+1][2]

    Do
        $iFormat = _ClipBoard_EnumFormats($iFormat)

        If $iFormat <> 0 Then
            $aOld_Clip[0][0] += 1
            $aOld_Clip[$aOld_Clip[0][0]][0] = _ClipBoard_GetData($iFormat)
            $aOld_Clip[$aOld_Clip[0][0]][1] = $iFormat
        EndIf
    Until $iFormat = 0

    _ClipBoard_Empty()
    _ClipBoard_Close()

    If $bActiveWindow Then
        Send('!{PRINTSCREEN}')
    Else
        Send('{PRINTSCREEN}')
    EndIf

    $Timer = TimerInit()

    While TimerDiff($Timer) < 1000
        _ClipBoard_Open(0)
        $hBitmap = _ClipBoard_GetDataEx($CF_BITMAP)
        _ClipBoard_Close()
        If $hBitmap Then ExitLoop
        Sleep(10)
    WEnd

    $hBitmap = DllCall('user32.dll', 'ptr', 'CopyImage', 'ptr', $hBitmap, 'int', 0, 'int', 0, 'int', 0, 'int', 0)
    If Not @error Then $hBitmap = $hBitmap[0]

    _ClipBoard_Open(0)

    For $i = 1 To $aOld_Clip[0][0]
        _ClipBoard_SetData($aOld_Clip[$i][0], $aOld_Clip[$i][1])
    Next

    _ClipBoard_Close()

    If Not $hBitmap Then Return 0

    If $sFile <> "" Then
        _GDIPlus_Startup()
        $hImage = _GDIPlus_BitmapCreateFromHBITMAP($hBitmap)
        $Result = _GDIPlus_ImageSaveToFile($hImage, $sFile)
        _GDIPlus_ImageDispose($hImage)
        _GDIPlus_Shutdown()
    Else
        $Result = $hBitmap
    EndIf

    Return $Result

EndFunc


Примечания: Приведённый скрипт делает скриншот, если бездействие пользователя больше 10 сек, но мне нужно ОБРАТНОЕ, то есть, каждые 3 секунды, должна выполняться функция _ScreenCaptureEx , при условии, что бездействие системы меньше 10 сек...
Пробовал
Код:
If TimerDiff($start1) > 3000 And _Timer_GetIdleTime() < 10000 Then
не выходит(
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
lastangel [?]
А так?
Код:
#NoTrayIcon
#include <ScreenCapture.au3>
#include <Timers.au3>

HotKeySet('{Esc}', '_Exit')
AdlibRegister('_Screen', 3000)

While 1
	Sleep(500)
WEnd

Func _Screen()
	If _Timer_GetIdleTime() > 10000 Then Return
	Local $s_Dir = @ScriptDir & '\Screen\', $s_FileName, $f_Cursor = False

	If Not FileExists($s_Dir) Then DirCreate($s_Dir)
	$s_FileName = StringFormat('%s_%s_%s [%s_%s].jpg', @HOUR, @MIN, @SEC, @MDAY, @MON)
	ConsoleWrite($s_FileName & @LF)
	_ScreenCapture_Capture($s_Dir & $s_FileName, 0, 0, @DesktopWidth, @DesktopHeight, $f_Cursor)
EndFunc   ;==>_Screen

Func _Exit()
	Exit
EndFunc   ;==>_Exit
 
Автор
L

lastangel

Новичок
Сообщения
39
Репутация
0
Спасибо большое, так работает :laugh: :laugh: :laugh:
 
Верх