afk erkennen

11/14/2012 23:21 Achat#1
Hi, und zwar möchte ich mit AutoIt herausfinden, ob der Benutzer des Computers afk (nicht da) ist.

[Only registered and activated users can see links. Click Here To Register...]

[Only registered and activated users can see links. Click Here To Register...]

Wenn der Benutzer für X Sekunden/Minuten nicht da ist, dann soll eine Funktion ausgeführt werden. Wie kann ich nun herausfinden, ob der Benutzer afk ist? Und wie lange er schon afk ist?

Ich könnte ja mit _IsPressed jede Taste abfragen, aber das würde bestimmt viel CPU-Last verursachen.

Hat jemand eine Idee?

MfG
11/14/2012 23:24 Melodead#2
Kommt drauf an was du unter afk verstehst es gibt einmal die möglichkeit es direkt für Skype zu machen also wenn er in Skype afk ist oder die möglich zu sehen das er garnicht da ist sprich nichts am pc mach für das zweite is es aber nötig im das prog zu schicken und nicht unter zu jubeln ^^
11/14/2012 23:41 Croco™#3
Naja ich denke das einfachste wäre die Mausposition abzufragen.
Bewegt sich diese innerhalb einer bestimmten Zeit nicht aus einem Bestimmten Raum hinaus, scheint der User afk zu sein.

Edit: Hab das gerade gefunden
PHP Code:
#include <Date.au3>

HotKeySet("{ESC}""_Quit")

$IdleMinimum 50

While 1
    $iIdle 
_IdleWaitStart($IdleMinimum)
    
ConsoleWrite(_Now() & ' ' & @UserName ' not active ' _TickToTimeString($iIdle) & @CRLF)
    
$iIdle _IdleWaitCommit($IdleMinimum)
    
ConsoleWrite(_Now() & ' ' & @UserName ' was inactive ' _TickToTimeString($iIdle) & @CRLF)
WEnd

Func _IdleWaitStart
($idlesec)
    
Local $aRet$iSave$iTick$LastInputInfo DllStructCreate("uint;dword")
    
DllStructSetData($LastInputInfo1DllStructGetSize($LastInputInfo))
    
DllCall("user32.dll""int""GetLastInputInfo""ptr"DllStructGetPtr($LastInputInfo))
    
    Do
        
Sleep(200)
        
$iSave DllStructGetData($LastInputInfo2)
        
DllCall("user32.dll""int""GetLastInputInfo""ptr"DllStructGetPtr($LastInputInfo))
        
$aRet DllCall("kernel32.dll""long""GetTickCount")
    
Until ($aRet[0] - DllStructGetData($LastInputInfo2)) > $idlesec

    
Return $aRet[0] - DllStructGetData($LastInputInfo2)
EndFunc   ;==>_IdleWaitStart

Func _IdleWaitCommit
($idlesec)
    
Local $iSave$LastInputInfo DllStructCreate("uint;dword")
    
DllStructSetData($LastInputInfo1DllStructGetSize($LastInputInfo))
    
DllCall("user32.dll""int""GetLastInputInfo""ptr"DllStructGetPtr($LastInputInfo))
    
    Do
        
$iSave DllStructGetData($LastInputInfo2)
        
Sleep(200)
        
DllCall("user32.dll""int""GetLastInputInfo""ptr"DllStructGetPtr($LastInputInfo))
    
Until (DllStructGetData($LastInputInfo2) - $iSave) > $idlesec
    
    
Return DllStructGetData($LastInputInfo2) - $iSave
EndFunc   
;==>_IdleWaitCommit

Func _TickToTimeString
($iTicks)
    
Local $iHours$iMins$iSecs$sText ''
    
_TicksToTime($iTicks$iHours$iMins$iSecs)
    
    If 
$iHours Then $sText $iHours ' hours '
    
If $iMins Then $sText &= $iMins ' minutes '
    
If $iSecs Then $sText &= $iSecs ' seconds'
    
If $sText '' Then $sText 'less than a second'
    
    
Return $sText
EndFunc   
;==>_TickToTimeString

Func _Quit
()
    Exit
EndFunc   ;==>_Quit 
11/15/2012 09:10 Futur94#4
So müsste es auch gehen denke ich:

Code:
#include <Timers.au3>
SplashTextOn("_Timer_GetIdleTime-Beispiel","Bitte 10 Sekunden warten...",300,50,-1,-1,34,'',14,800)

; Maus- oder Tastaturaktionen während dieser 10 Sekunden beeinflussen die berichtete Leerlaufzeit
Sleep(10 * 1000); 10sec
SplashOff()

Global $iIdleTime = _Timer_GetIdleTime()

MsgBox(64, "_Timer_GetIdleTime", "Leerlaufzeit = " & $iIdleTime & "ms")
11/16/2012 22:58 Klugscheißer#5
Hi, ich bin zwar kein Kenner in diesem Thema und du hast mir ja auch schon geholfen in Skype. Es gibt doch aber eine Möglichkeit, abzufragen, ob sich ein Bereich von Pixeln geändert hat. Wenn man diesen Bereich um die Maus setzt müsste man doch feststellen können, ob der User etwas tut oder eben nicht.