Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Как определить период бездействия пользователя (пример):
Код: Выделить весь код
#include <Date.au3>
Opt("TrayIconHide", 1)

$IdleMinimum = 1000 ; Количество допустимых секунд неактивности
$LogFileName = StringTrimRight (@ScriptFullPath, 4) & ".log" ; Имя файла журнала

While 1
    ; Ожидание неактивности достаточной длительности
    $iIdle = _IdleWaitCommit ($IdleMinimum)
    ; Запись этого события в лог
    Local $sHours = '', $sMins = '', $sSecs = ''
    $iHours = Int ($iIdle/3600)
    If $iHours Then $sHours = $iHours & ' часов '
    $iMins = Int (Mod ($iIdle, 3600)/60)
    If $iMins Then $sMins = $iMins & ' минут '
    $iSecs = Round (Mod (Mod ($iIdle, 3600), 60))
    If $iSecs Then $sSecs = $iSecs & ' секунд'
    FileWriteLine ($LogFileName, _Now () & ' ' & @UserName & ' неактивен ' & $sHours & $sMins & $sSecs & @CRLF)
Wend

; Функция: ожидание неактивности пользователя.
; Возвращает: время неактивности в секундах.
; $idlesec - минимальная длительность ожидаемой неактивности в сек.
Func _IdleWaitCommit ($idlesec)
    $idlesec = $idlesec * 1000
    Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
    DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Do
        $iSave = DllStructGetData ($LastInputInfo, 2)
        Sleep(500)
        DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec
    Return Round ((DllStructGetData ($LastInputInfo, 2)-$iSave)/1000)
EndFunc

Последний раз редактировалось amel27, 06-03-2007 в 07:35.

Это сообщение посчитали полезным следующие участники:

Отправлено: 05:51, 06-03-2007 | #762