Что нового

[Окна, Диалоги] Отслеживание активного окна + счет времени

Delus1on

Новичок
Сообщения
8
Репутация
0
Добрый день. Нужна помощь)

Нужно написать скрипт, который будет постоянно следить активно ли окно, и если да - то высчитывать, сколько времени. Если нет - то ждать пока окно станет активным и считать дальше. А если процесс вообще закрыт, то выходить со скрипта.

Суть в том, что нужно узнать, сколько пользователь просидел в той или иной программе, а не просто запустил, свернул и лазит себе где либо еще.

Надеюсь на Вашу помощь. Заранее благодарен.
 
Автор
D

Delus1on

Новичок
Сообщения
8
Репутация
0
Viktor1703 [?]
Поставил на виртуалку Windows, поставил вашу программу, запустил и лазию где хочу.

Поставить виртуалку или еще что либо невозможно, тк права у пользователя зарезаны.

Попробую объяснить всю ситуацию - на работе попросили написать скрипт, для того, что бы следить, сколько ,пользователь с ограниченными правами, сидит в той или иной игре. За проведенное в ней время, мы будем давать плюшки, и надо следить за тем, что бы особо хитрожопые не делали так - запустили игру, свернули и сидят себе в ВК и тд.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Delus1on

Код:
;#NoTrayIcon

$iTime = 0

While 1
	WinWaitActive('[CLASS:Notepad]', '')
	$hTimer  = TimerInit()
	WinWaitNotActive('[CLASS:Notepad]', '')
	$iTime += TimerDiff($hTimer)
	ConsoleWrite($iTime & @CRLF)
	If Not ProcessExists('notepad.exe') Then ExitLoop
	Sleep(800)
WEnd

ConsoleWrite($iTime & @CRLF)
 
Автор
D

Delus1on

Новичок
Сообщения
8
Репутация
0
WSWR [?]
Код: AutoIt [Выделить];#NoTrayIcon$iTime = 0While 1 WinWaitActive('[CLASS:Notepad]', '') $hTimer = TimerInit() WinWaitNotActive('[CLASS:Notepad]', '') $iTime += TimerDiff($hTimer) ConsoleWrite($iTime & @CRLF) If Not ProcessExists('notepad.exe') Then ExitLoop Sleep(800)WEndConsoleWrite($iTime & @CRLF)

Спасибо большое. Именно оно)

Теперь другой вопрос, а можно как либо результат выводить не в консоле, а передавать на сервер?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ещё такой вариант

Код:
#include <Date.au3>

Global $iTimer, $Hour, $Min, $Sec

While 1
	If ProcessExists('notepad.exe') Then
	    If WinActive(WinGetHandle('[CLASS:Notepad]')) Then
		    If (Not $iTimer) Then
		        $iTimer = TimerInit()
		    EndIf
	    Else
		    If $iTimer Then
			    If _TicksToTime(Int(TimerDiff($iTimer)), $Hour, $Min, $Sec) Then
	                ConsoleWrite(StringFormat('%02i:%02i:%02i', $Hour, $Min, $Sec) & @CR)
			    EndIf
                $iTimer = 0
		    EndIf
	    EndIf
	EndIf
Wend



Delus1on [?]
Теперь другой вопрос, а можно как либо результат выводить не в консоле, а передавать на сервер?

Можно, только это уже другой вопрос. Можно даже на мыло отправлять логи.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Delus1on [?]
Теперь другой вопрос, а можно как либо результат выводить не в консоле, а передавать на сервер?
Предупреждение За нарушение общих правил (пункт В.4):
Не лепите несколько вопросов разной тематики в один пост. По типу "Ребят, а ещё такой вопрос...". Каждый вопрос в свою тему.


С уважением, ваш Глобальный модератор.
 
Верх