Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

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

Аватара для Creat0R

Must AutoIt


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

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


Ура!!! я это сделал, немного помучался, но всё же сделал!

Вместо использования звуков системы, я использовал её персонажа - старый добрый волшебник “Merlin” ...

Если в системе не найден персонаж, то выводится TrayTip. А и ещё, чтобы персонаж ещё и говорил, в системе должен быть установлен голосовой движёк.

При простое более 5-ти секунд, иконка трея меняется на неактивного юзера, при активности иконка обратно меняется на что-то вроде юзера в движении (не смог в системе найти более походящей иконки).

Также при простое в переменную $TotalTime накапливается общее время простоя (секунды), а при активности эта переменная сбрасывается на ноль (0)...
Также удалось заносить в массив отдельные заготовки сообщении, если есть файл сообщении (LazyMessages.dat), то с него считываются строки, если его нет, то в скрипте уже заготовлены 10 сообщении (на английском)...
Для выхода из скрипта в любое время, нужно нажать Ctrl E (при английской раскладке).

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

Код: Выделить весь код
HotKeySet("^e", "Quit")
TraySetIcon("shell32.dll", 160)
TraySetToolTip("Laziness Detecter (!)")

Dim $MessagesArr[11]
$MessagesArr[0] = 10
$MessagesArr[1] = "You are been lazy for a long time <%n>"
$MessagesArr[2] = "This is enough, start doing something >:( - you are lazy to much (%n)"
$MessagesArr[3] = "Hello!? Any one is home? why you are so lazy so long time? <%n> do somthing!"
$MessagesArr[4] = "Hi! Don't you fill like cow? Laziness is reason number 1 of why people die"
$MessagesArr[5] = "It's been over a <%n> time sense you touch your computer, touch it now!"
$MessagesArr[6] = "I can not wait for you so long (%n), I am going to shutdown myself.... beep.. beeep.. beeeeeep"
$MessagesArr[7] = "Hey man, are you forgot about me? Fine! I want to divorced"
$MessagesArr[8] = "You have no check your email for <%n> time, maybe there something intersteing?"
$MessagesArr[9] = "There is a virus on your computer! (it exists there for a long time <%n>) perform virus checking immediately!"
$MessagesArr[10] = "Hi! What's up dog? Don't pay attention; I am just stupid character that doesn't need attention! >:("

$MessagesFile = "LazyMessages.dat"
If FileExists($MessagesFile) And FileRead($MessagesFile) <> "" Then $MessagesArr = StringSplit(FileRead($MessagesFile), @LF)

$Idle = 0
$TotalTime = 0
$MinLaziness = 10
$MaxLaziness = 60
$LazyLimit = Random($MinLaziness, $MaxLaziness, 1)
$TimeStamp = TimerInit()

AdlibEnable("CheckLaziness", 10)

While 1
	$Idle = _IdleWaitCommit(0)
	TraySetIcon("shell32.dll", 160)
	TrayTip("", "", 0)
	$TimeStamp = TimerInit()
	$Idle = 0
	$TotalTime = 0
WEnd

Func CheckLaziness()
	$TimeDiff = Round(TimerDiff($TimeStamp)/1000)
	If $TimeDiff > $LazyLimit And $Idle = 0 Then
		TraySetIcon("shell32.dll", 111)
		$TotalTime += $TimeDiff
		$LazyTime = _SecsToTime($TotalTime, ":")
		$TextToSay = StringReplace($MessagesArr[Random(1, $MessagesArr[0], 1)], "%n", $LazyTime)
		$SleepTime = Round((StringLen($TextToSay)/7)*1000)
		If StringLen($TextToSay) < 7 Then $SleepTime = 5000
		CharacterMsg($TextToSay, Random(100, @DesktopWidth-100, 1), Random(10, @DesktopHeight-150, 1), $SleepTime)
		If @error Then TrayTip("You are lazy", $TextToSay, 5, 1)
		$LazyLimit = Random($MinLaziness, $MaxLaziness, 1)
		$TimeStamp = TimerInit()
	EndIf
	If $TimeDiff >= ($LazyLimit/2) Then TrayTip("", "", 0)
	If $TimeDiff >= 5 And $LazyLimit > 5 Then TraySetIcon("shell32.dll", 111)
EndFunc

Func _SecsToTime($iTicks, $Delim)
	If Number($iTicks) >= 0 Then
		$iHours = Int($iTicks / 3600)
		$iTicks = Mod($iTicks, 3600)
		$iMins = Int($iTicks / 60)
		$iSecs = Round(Mod($iTicks, 60))
		If StringLen($iHours) = 1 Then $iHours = "0" & $iHours
		If StringLen($iMins) = 1 Then $iMins = "0" & $iMins
		If StringLen($iSecs) = 1 Then $iSecs = "0" & $iSecs
		$Time = $iHours & $Delim & $iMins & $Delim & $iSecs
		Return $Time
	Else
		SetError(1)
		Return 0
	EndIf
EndFunc

Func _IdleWaitCommit($idlesec)
    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(200)
        DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
    Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec
    Return DllStructGetData ($LastInputInfo, 2)-$iSave
EndFunc

Func CharacterMsg($TextToSay, $MovexX=200, $MoveY=200, $Sleep=5000)
	$figure = "merlin"
	If $TextToSay = "" Then $TextToSay = "Oops! there was an Error!"
	$Path = @WindowsDir & "\MSAGENT\CHARS\merlin.acs"
	If Not FileExists($Path) Then Return SetError(1)
	$AgentControl = ObjCreate("Agent.Control.1") 
	$SinkObject=ObjEvent($AgentControl, "event_") 
	If Isobj($AgentControl) Then $AgentControl.Connected = True
	$AgentControl.Characters.Load($figure, $Path) 
	$A = $AgentControl.Characters($figure) 
	$A.MoveTo($MovexX, $MoveY, 0)
	$A.Show
	$A.Speak($TextToSay)
	$A.Play("Greet") 
	$A.Play("RestPose")
	Sleep($Sleep)
	$A.Hide
	$A.StopAll
	$AgentControl.Characters.Unload($figure)
EndFunc

Func Quit()
	Exit
EndFunc
P.S
Скрипт чёрно-белый потому как в разукрашенном виде он занимает более 40-ка тысяч строк.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 17:28, 11-03-2007 | #270