Войти

Показать полную графическую версию : [решено] Запуск определенной программы через n времени???


Anarasius
16-09-2009, 16:56
Нужен скрипт, который постоянно сидел бы в системном трее и через каждые 2 недели запускал программу (или каждый месяц 10 и 20 числа). И если комп был в это время выключен то программа должна запуститься при его включении. Заранее спасибо!

Creat0R
16-09-2009, 22:27
Нужен скрипт, который постоянно сидел бы в системном трее и через каждые 2 недели запускал программу (или каждый месяц 10 и 20 числа) »

Вот так примерно:

#RequireAdmin

;Добавляем программу в автозапуск
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName)) = "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) _
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), "REG_SZ", '"' & @ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptFullPath) & '"')

;Указываем программу на запуск
$sApp = "notepad.exe"

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@MDAY) = 10 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)($sApp)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@MDAY) = 10
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(60000)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(1000)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Anarasius
16-09-2009, 23:18
Все отлично, но он у меня бесконечно запускает программу через каждую сек

Creat0R
16-09-2009, 23:30
он у меня бесконечно запускает программу через каждую сек »
Если 10-ое число? В поставленной задачи ничего не сказано по поводу одноразового запуска :)

Поправил свой пост.

Anarasius
16-09-2009, 23:49
Всеравно, я ставлю сегодняшнее число и запускаю скрипт он начинает бесконечно открывать блокнот, попробуйте сами!

Пробовал без добавления в автозапуск

Creat0R
17-09-2009, 00:04
А так:

#RequireAdmin

;Добавляем программу в автозапуск
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName)) = "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) _
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), "REG_SZ", '"' & @ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptFullPath) & '"')

;Указываем программу на запуск
$sApp = "notepad.exe"

;Указываем число запуска
$nDay = 16

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@MDAY) = $nDay Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)($sApp)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@MDAY) = $nDay
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(60000)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(1000)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

?

Diamond
17-09-2009, 01:15
Я бы добавил последнюю дату запуска в реестр или в ini-файл:
#RequireAdmin

;Добавляем программу в автозапуск
If RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName) = "" Then _
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"' & @ScriptFullPath & '"')

;Указываем программу на запуск
$sApp = "notepad.exe"

;Определяем последнюю дату запуска
$sLastDay = IniRead(@ScriptDir & "\test.ini","options", "LastDay", -1)

While 1
If @MDAY = 10 Or @MDAY = 17 Then
If $sLastDay <> @MDAY & "." & @MON Then
;Запоминаем последнюю дату для текущей сессии:
$sLastDay = @MDAY & "." & @MON
;Запоминаем последнюю дату запуска в ini-файл(на случай перезагрузки компьютера):
IniWrite(@ScriptDir & "\test.ini","options", "LastDay", $sLastDay)
Run($sApp)
EndIf
EndIf
Sleep(2000)
WEnd

FlatX007
18-09-2009, 00:25
И если комп был в это время выключен то программа должна запуститься при его включении. Заранее спасибо! »
Все самое главное забыли :tongue:

Вот ... извиняйте если что забыл :) (Оставлю ка я себе програмку пригодится)
Количество "чисел" для запуска вроде как неограничено, можно хоть 20 раз за месяц...

#NoTrayIcon
#include <File.au3>

If WinExists(@ScriptName) Then _Exit()
AutoItWinSetTitle(@ScriptName)

Opt("TrayMenuMode",1)
TraySetClick(8)
TraySetIcon("Shell32.dll", 25)
TraySetToolTip ("Планировщик запуска")

HotKeySet("!p", "_Exit") ; Alt + P выход

Global $IniFile = @ScriptDir & "/Data_" & @ScriptName & ".ini"
Global $iMDAY
Global $NumberMonth[3]
$NumberMonth[0] = 10 ; Нужные числа для запуска
$NumberMonth[1] = 20
$NumberMonth[2] = 28
Global Const $iNumberNull = $NumberMonth[0]

If Not FileExists($IniFile) Then _FileCreate($IniFile)

If @Compiled = 1 Then
If RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName) = "" Then
$iMsgBox = MsgBox(266532,"","Поместить программу в автозагрузку ?")
If $iMsgBox = 6 Then RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"' & @ScriptFullPath & '"')
EndIf
EndIf

$nAbout = TrayCreateItem("Тут цопирайты (С) :)")
TrayCreateItem("")
$nExit = TrayCreateItem("Выйти из планировщика задачь")
TraySetState()

$iIniRead = IniRead($IniFile, "Data", "Run", 0)
If $iIniRead = 0 Then IniWrite($IniFile, "Data", "Run", "<" & @MDAY & "> <" & @MON & ">")

$aiArray = StringRegExp($iIniRead, '<(.*?)>', 3)
If Not (@error) Then
If @MDAY > $aiArray[0] Then $NumberMonth[0] = @MDAY
If @MON <> $aiArray[1] Then $NumberMonth[0] = @MDAY
EndIf

While 1
Switch TrayGetMsg()
Case $nExit
_Exit()
Case $nAbout
MsgBox(270400,"About", "Цопирайтинг (С) 2009", 5)

Case Else
If @MDAY <> $iMDAY Then
For $iI = 0 To UBound($NumberMonth) - 1
If @MDAY = $NumberMonth[$iI] Then
TraySetIcon("Shell32.dll", 246)
TrayTip("Запускаем ...", "Планироващик задачь", 0, 1)
RunWait("notepad") ; Программа для запуска
IniWrite($IniFile, "Data", "Run", "<" & @MDAY & "> <" & @MON & ">")
$NumberMonth[0] = $iNumberNull
TraySetIcon("Shell32.dll", 25)
ExitLoop
EndIf
Next
EndIf
$iMDAY = @MDAY
EndSwitch
WEnd

Func _Exit()
Exit
EndFunc

Creat0R
18-09-2009, 02:46
Все самое главное забыли »
И что это? добавление в автозапуск?

Diamond
18-09-2009, 04:41
И если комп был в это время выключен то программа должна запуститься при его включении. Заранее спасибо!
Все самое главное забыли »
Я так понял... если запуск на запланированное число был пропущен(например если компьютер в этот день ни разу не включали), то нужно запустить программу как только это станет возможным, т.е. уже не зависимо от назначенного числа.

P.S. ИМХО, это уже почти "Планировщик задач" получается. :)

Anarasius
18-09-2009, 12:24
И ребят в скрипте где то ошибка, если мы перезагружаем комп, то скрипт после этого пишет что тип запуск программы был а на самом деле Run он не выполнил. (это если вместо notepad прописать программу какуюнибуть (С/progam files/......))

FlatX007
18-09-2009, 17:16
(это если вместо notepad прописать программу какуюнибуть (С/progam files/......)) »

Прямой путь для запуска не стоит использовать.
Папка "программ файл" - (Вся система) не всегда находится на диске С ... у меня вот она на диске D
Для этого используют макро : @ProgramFilesDir

RunWait(@ProgramFilesDir & '\Windows Media Player\wmplayer.exe')
Run(@ProgramFilesDir & '\Windows Media Player\wmplayer.exe')

Anarasius
20-09-2009, 00:26
хмм, программа при наступлении нужной даты запускается целый день т.е. если у меня настало 10 число программа запустилась, перезагружаю опять запустилась, как это убрать т.е.что бы программа запускалась только один раз при наступлении даты.

FlatX007
20-09-2009, 01:12
В шапке темы об этом не слова!

Creat0R
20-09-2009, 01:31
как это убрать т.е.что бы программа запускалась только один раз при наступлении даты. »
Вот именно поэтому задачу изначально нужно поставить так, чтобы потом небыло вопросов и переделок:

#NoTrayIcon
#include <Misc.au3>
;

_Singleton(@ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName))

;Задаём опции трея (меню пользователя)
Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)("TrayMenuMode", 1)

;Создаём пункты в значке трея
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $nAbout_TrayItem = TrayCreateItem (http://www.autoitscript.com/autoit3/docs/functions/TrayCreateItem.htm)("About...")
TrayCreateItem (http://www.autoitscript.com/autoit3/docs/functions/TrayCreateItem.htm)("")
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $nExit_TrayItem = TrayCreateItem (http://www.autoitscript.com/autoit3/docs/functions/TrayCreateItem.htm)("Выйти из планировщика задач (Ctrl+Shift+E)")

;Задаём состояние трея
TraySetToolTip (http://www.autoitscript.com/autoit3/docs/functions/TraySetToolTip.htm)("Планировщик запуска")
TraySetIcon (http://www.autoitscript.com/autoit3/docs/functions/TraySetIcon.htm)("Shell32.dll", 25)
TraySetClick (http://www.autoitscript.com/autoit3/docs/functions/TraySetClick.htm)(8)
TraySetState (http://www.autoitscript.com/autoit3/docs/functions/TraySetState.htm)()

;Задаём горячую клавишу для выхода
HotKeySet (http://www.autoitscript.com/autoit3/docs/functions/HotKeySet.htm)("^+e", "_Exit") ; Ctrl + Shift + E выход

;Указываем файл конфигурации
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sConfig_File = StringTrimRight (http://www.autoitscript.com/autoit3/docs/functions/StringTrimRight.htm)(@ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptFullPath), 3) & "ini"

;Указываем программу(ы) для запуска
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $aRun_Apps = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)("notepad.exe|calc.exe", "|")

;Указываем числа для запуска программ(ы)
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $aRun_Days = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)("10,20,30", ",")

;Определяем последнюю дату запуска
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sLast_Run_Day = IniRead (http://www.autoitscript.com/autoit3/docs/functions/IniRead.htm)($sConfig_File, "Main", "Last Run Day", -1)

;Добавляем программу в автозапуск
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @Compiled (http://www.autoitscript.com/autoit3/docs/macros.htm#@Compiled) = 1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) RegRead (http://www.autoitscript.com/autoit3/docs/functions/RegRead.htm)("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName)) = "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iAsk = MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(266532, "", "Поместить программу в автозагрузку?")

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iAsk = 6 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) _
RegWrite (http://www.autoitscript.com/autoit3/docs/functions/RegWrite.htm)("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptName), "REG_SZ", '"' & @ScriptFullPath (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptFullPath) & '"')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

;Запускаем функцию _Check_Run_Proc() каждые 5 секунд
AdlibEnable (http://www.autoitscript.com/autoit3/docs/functions/AdlibEnable.htm)("_Check_Run_Proc", 5000)
Call (http://www.autoitscript.com/autoit3/docs/functions/Call.htm)("_Check_Run_Proc")

;Главный цикл
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) TrayGetMsg (http://www.autoitscript.com/autoit3/docs/functions/TrayGetMsg.htm)()
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nExit_TrayItem
_Exit()
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $nAbout_TrayItem
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(270400, "About", "Copyright (С) 2009", 5)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Check_Run_Proc()
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@MDAY) = $sLast_Run_Day Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return)

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aRun_Days[0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@MDAY) = $aRun_Days[$i] Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
;Запоминаем последний день запуска
$sLast_Run_Day = $aRun_Days[$i]

;Запоминаем последний день запуска в ini-файл (на случай перезагрузки компьютера)
IniWrite (http://www.autoitscript.com/autoit3/docs/functions/IniWrite.htm)($sConfig_File, "Main", "Last Run Day", $sLast_Run_Day)

;Задаём иконку значку в трее
TraySetIcon (http://www.autoitscript.com/autoit3/docs/functions/TraySetIcon.htm)("Shell32.dll", 246)

;Запускаем программы (задачи)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sTasks = ""

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $j = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aRun_Apps[0]
$sTasks &= $j & ". " & StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aRun_Apps[$j], "^.*\\", "") & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF)
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)($aRun_Apps[$j])
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

;Показываем информацию о запуске
TrayTip (http://www.autoitscript.com/autoit3/docs/functions/TrayTip.htm)("Планировщик...", "Запущенные задачи: " & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@CRLF) & $sTasks, 0, 1)

;Ждём 3 секунды
Sleep (http://www.autoitscript.com/autoit3/docs/functions/Sleep.htm)(3000)

;Задаём иконку значку в трее (обратно на изначальную)
TraySetIcon (http://www.autoitscript.com/autoit3/docs/functions/TraySetIcon.htm)("Shell32.dll", 25)

ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _Exit()
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Для пропущенных дней нужно писать отдельную проверку, и как верно заметил Diamond, это уже начинает походить на планировщик задач.




© OSzone.net 2001-2012