Что нового

Запуск программы при простое пк

Qweezy

Новичок
Сообщения
9
Репутация
1
Здравствуйте! Прошу написать код который через определенный (настраиваемый в секундах) промежуток времени бездействия пк запускал бы программу, и в случае если пошевелить мышью закрывал ее. Я так думаю можно реализовать так: Поставить слип допустим на 120 секунд, после этого проверить есть ли активность мышкой, если нету то запустить программу и ждать пока произойдет активность на мышке, если появилась то закрыть программу и перейти в самое начало, и так бесконечно. Также нужно чтобы он запускал только 1 копию программы, то есть если в 1 раз он увидел простой и запустил ее и пошел заного ждать простоя то увидев что программа уже запущена проходил мимо. Похожую тему находил, но там работает как то кривовато Заранее всем огромное спасибо! :smile:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Вы пробовали вариант InnI ? http://autoit-script.ru/index.php?topic=14571.msg109082#msg109082
Чем не устраивает ?
Запускает блокнот при простое и при движении мышки закрывает его, если лог лишний - уберите
Код:
#include <Timers.au3>
#include <Date.au3>

$Idle = 120 ; время бездействия в секундах

While 1
  Sleep(1000)
  If _Timer_GetIdleTime() > $Idle * 1000 Then
    FileWriteLine("log.txt", "Начало простоя: " & @UserName & " " & _DateAdd("s", -1 * $Idle, _NowCalc()))
	$iPID = Run('notepad.exe')
    Do
      Sleep(1000)
    Until _Timer_GetIdleTime() < $Idle * 1000
    FileWriteLine("log.txt", "Завершение простоя: " & @UserName & " " & _NowCalc())
	ProcessClose($iPID)
  EndIf
WEnd
 
Автор
Q

Qweezy

Новичок
Сообщения
9
Репутация
1
ra4o сказал(а):
Вы пробовали вариант InnI ? http://autoit-script.ru/index.php?topic=14571.msg109082#msg109082
Чем не устраивает ?
Запускает блокнот при простое и при движении мышки закрывает его, если лог лишний - уберите
Код:
#include <Timers.au3>
#include <Date.au3>

$Idle = 120 ; время бездействия в секундах

While 1
  Sleep(1000)
  If _Timer_GetIdleTime() > $Idle * 1000 Then
    FileWriteLine("log.txt", "Начало простоя: " & @UserName & " " & _DateAdd("s", -1 * $Idle, _NowCalc()))
	$iPID = Run('notepad.exe')
    Do
      Sleep(1000)
    Until _Timer_GetIdleTime() < $Idle * 1000
    FileWriteLine("log.txt", "Завершение простоя: " & @UserName & " " & _NowCalc())
	ProcessClose($iPID)
  EndIf
WEnd
Пробовал, но он не убивает процесс при движении мыши (то есть скорее всего не видит что компьютер уже не в простое)
А так вообще, идеальный вариант был бы, не могли бы вы дописать код?


Добавлено:
Сообщение автоматически объединено:

ra4o сказал(а):
Вы пробовали вариант InnI ? http://autoit-script.ru/index.php?topic=14571.msg109082#msg109082
Чем не устраивает ?
Запускает блокнот при простое и при движении мышки закрывает его, если лог лишний - уберите
Код:
#include <Timers.au3>
#include <Date.au3>

$Idle = 120 ; время бездействия в секундах

While 1
  Sleep(1000)
  If _Timer_GetIdleTime() > $Idle * 1000 Then
    FileWriteLine("log.txt", "Начало простоя: " & @UserName & " " & _DateAdd("s", -1 * $Idle, _NowCalc()))
	$iPID = Run('notepad.exe')
    Do
      Sleep(1000)
    Until _Timer_GetIdleTime() < $Idle * 1000
    FileWriteLine("log.txt", "Завершение простоя: " & @UserName & " " & _NowCalc())
	ProcessClose($iPID)
  EndIf
WEnd
упс. Я извиняюсь, все работает)
 

Wu-Tang

Новичок
Сообщения
5
Репутация
0
ra4o сказал(а):
Вы пробовали вариант InnI ? http://autoit-script.ru/index.php?topic=14571.msg109082#msg109082
Чем не устраивает ?
Запускает блокнот при простое и при движении мышки закрывает его, если лог лишний - уберите
Код:
#include <Timers.au3>
#include <Date.au3>

$Idle = 120 ; время бездействия в секундах

While 1
  Sleep(1000)
  If _Timer_GetIdleTime() > $Idle * 1000 Then
    FileWriteLine("log.txt", "Начало простоя: " & @UserName & " " & _DateAdd("s", -1 * $Idle, _NowCalc()))
	$iPID = Run('notepad.exe')
    Do
      Sleep(1000)
    Until _Timer_GetIdleTime() < $Idle * 1000
    FileWriteLine("log.txt", "Завершение простоя: " & @UserName & " " & _NowCalc())
	ProcessClose($iPID)
  EndIf
WEnd

здравствуйте.
извиняюсь за подъем темы.
а не могли бы поправить скрипт, с учетом того, чтобы проверка осталась, но при движении мыши/клавы процесс не убивался.
те просто проверка простоя и запуск приложения каждые n секунд.
убрал из скрипта:
Код:
 ProcessClose($iPID)
но тогда скрипт запускает копию приложения, те каждый раз при проверке.
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
Wu-Tang [?]
скрипт запускает копию приложения, те каждый раз при проверке
А что нужно-то? Запускать приложение только при его отсутствии? Если да, то так
Код:
If Not ProcessExists("notepad.exe") Then Run("notepad.exe")
 

Wu-Tang

Новичок
Сообщения
5
Репутация
0
ага, только при его отсутствии.
а куда ваш код вставить нужно?
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
Код:
#include <Timers.au3>

$Idle = 60 ; время бездействия в секундах

While 1
  Sleep(1000)
  If _Timer_GetIdleTime() > $Idle * 1000 Then
    If Not ProcessExists("notepad.exe") Then Run("notepad.exe")
    Do
      Sleep(1000)
    Until _Timer_GetIdleTime() < $Idle * 1000
  EndIf
WEnd
 

Wu-Tang

Новичок
Сообщения
5
Репутация
0
спасибо
если мне нужна проверка раз в 2ч, то это мне надо вверху вписать 7200?
и можно ли сделать, чтобы при наведении мыши на значок в трее отображалось не имя скрипта, а сколько времени остается до следующей проверки?
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
Wu-Tang [?]
если мне нужна проверка раз в 2ч, то это мне надо вверху вписать 7200?
Давайте рассуждать логически. Если указано "время бездействия в секундах", значит нужно часы перевести в секунды.
60 сек * 60 мин * 2 ч = 7200 сек
Ну, значит правильно.

можно ли сделать, чтобы при наведении мыши на значок в трее отображалось не имя скрипта, а сколько времени остается до следующей проверки?
Сделать-то можно, но...
Смысл работы скрипта в измерении времени ПРОСТОЯ компьютера. Как только вы остановите курсор на иконке в трее - вот тут начнётся отсчёт. Чтобы обновить тултип нужно будет убрать курсор с иконки и вернуть обратно - отсчёт начнётся заново. Другими словами, в тултипе иконки всегда будет примерно одинаковое время - начало отсчёта.
 

Wu-Tang

Новичок
Сообщения
5
Репутация
0
InnI [?]
Давайте рассуждать логически. Если указано "время бездействия в секундах", значит нужно часы перевести в секунды.60 сек * 60 мин * 2 ч = 7200 секНу, значит правильно.
ок тогда

Сделать-то можно, но...Смысл работы скрипта в измерении времени ПРОСТОЯ компьютера. Как только вы остановите курсор на иконке в трее - вот тут начнётся отсчёт. Чтобы обновить тултип нужно будет убрать курсор с иконки и вернуть обратно - отсчёт начнётся заново. Другими словами, в тултипе иконки всегда будет примерно одинаковое время - начало отсчёта.
действительно, это я тупанул, не подумал )))

ps а почему при наведении на иконку показывает имя с расширением на конце, а можно, чтобы просто имя показывало без расширения?
спасибо.
 

InnI

AutoIT Гуру
Сообщения
4,911
Репутация
1,427
OffTopic:
Wu-Tang [?]
почему при наведении на иконку показывает имя с расширением на конце
Потому что так решил разработчик.

а можно, чтобы просто имя показывало без расширения?
Можно указать любой текст до 128 символов
Код:
TraySetToolTip()


Но все эти вопросы к теме не относятся.
 

SunRez

Новичок
Сообщения
1
Репутация
0
Добрый день. Не подскажите, как сделать, чтобы данный скрипт и запущенное скриптом приложение убивались при смене пользователя\выхода из системы? Дело в том, что скрипт стоит в автозагрузке для всех пользователей и при смене пользователя скрипт дублируется в разных уч. записях.
 
Верх