Что нового

Сбросить _Timer_GetIdleTime перед началом выполнения скрипта

ildary

Новичок
Сообщения
49
Репутация
0
Уважаемые специалисты, подскажите пожалуйста, что можно сделать:

написан скрипт, который после запуска должен подождать 20 минут и если пользователь не дергал мышь/клаву, то должно выполниться некое действие. проблема в том, что если при старте скрипта пользователь уже давно ничего не делал, то скрипт посчитав, что уже _Timer_GetIdleTime > 20, начинает выполнение сразу. Пробовал перед вызовов выполнить MouseMove - не помогло. Заранее спасибо за советы!
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ildary [?]
Пробовал перед вызовов выполнить MouseMove - не помогло
Непонятно, почему у Вас MouseMove() не работает:
Код:
;#include <WinAPIEx.au3>
#include <Timers.au3>

HotKeySet('^{1}', '_Exit')

$iStart = TimerInit()
While 1
	If TimerDiff($iStart) > 3000 Then
		$aPos = MouseGetPos()
		MouseMove($aPos[0] + 50, $aPos[1] + 50, 0)
		MouseMove($aPos[0], $aPos[1], 0)
		$iStart = TimerInit()
	EndIf
	$iT_Timer = _Timer_GetIdleTime()
	;$iT_WinAPI = _WinAPI_GetIdleTime()
	ConsoleWrite('_Timer_GetIdleTime: ' & $iT_Timer & @CR); & '_WinAPI_GetIdleTime: ' & $iT_WinAPI & @CR)
	Sleep(500)
WEnd

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

ildary

Новичок
Сообщения
49
Репутация
0

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
ildary [?]
Возможно, причина в том, что я не использовал TimerInit()? Теперь я попробую с ним.
TimerInit() - TimerDiff() здесь не причем. В моем примере они используются только для того, чтобы каждые 3 секунды передвинуть мышку и вернуть ее обратно. После движения мышки значение _Timer_GetIdleTime() сбрасывается на 0 (у меня). Почему у Вас этого не происходит, мне непонятно. Вы бы привели, как писал Kaster, кусок своего кода.
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
А посчитать разницу между результатом _Timer_GetIdleTime() при запуске программы и результатом _Timer_GetIdleTime() в нужный момент нельзя?
 
Автор
I

ildary

Новичок
Сообщения
49
Репутация
0
Спасибо, я понял, что TimerInit() тут ни при чем.

вот мой код:


MouseMove ( 50, 50, 1 ) ;сбросим таймер бездействия

While 1

$iIdleTime = _Timer_GetIdleTime()
$iIdleTime = Round( $iIdleTime / ( 60 * 1000 ) )

If $iIdleTime > $Minites2Start Then ;recalc & exit

ReCalc()
ExitLoop

EndIf

Sleep( 60 * 1000 ) ; 1 min

WEnd
 
Автор
I

ildary

Новичок
Сообщения
49
Репутация
0
dwerf сказал(а):
А посчитать разницу между результатом _Timer_GetIdleTime() при запуске программы и результатом _Timer_GetIdleTime() в нужный момент нельзя?

Хорошая идея, так и сделаю, раз по другому не работает.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
ildary

{CodeWarn}
 

mrsoros

Новичок
Сообщения
20
Репутация
0
Как получить _Timer_GetIdleTime другого пользователя?
Задача такая: служба запускается под пользователем system, т.е. скрипт уже активен до авторизации какого либо пользователя компа. Пользователь авторизуется и службе надо понять сколько пользователь бездействует. Но _Timer_GetIdleTime возвращает бездействие пользователя system, а не того который авторизовался на компе.
Как получить время бездействия авторизованного пользователя процессу запущенному другим пользователем? а? :stars:
 
Верх