Цитата Anarasius:
как это убрать т.е.что бы программа запускалась только один раз при наступлении даты. »
|
Вот именно поэтому задачу изначально нужно поставить так, чтобы потом небыло вопросов и переделок:
Код:
#NoTrayIcon
#include <Misc.au3>
;
_Singleton(@ScriptName)
;Задаём опции трея (меню пользователя)
Opt("TrayMenuMode", 1)
;Создаём пункты в значке трея
Global $nAbout_TrayItem = TrayCreateItem("About...")
TrayCreateItem("")
Global $nExit_TrayItem = TrayCreateItem("Выйти из планировщика задач (Ctrl+Shift+E)")
;Задаём состояние трея
TraySetToolTip("Планировщик запуска")
TraySetIcon("Shell32.dll", 25)
TraySetClick(8)
TraySetState()
;Задаём горячую клавишу для выхода
HotKeySet("^+e", "_Exit") ; Ctrl + Shift + E выход
;Указываем файл конфигурации
Global $sConfig_File = StringTrimRight(@ScriptFullPath, 3) & "ini"
;Указываем программу(ы) для запуска
Global $aRun_Apps = StringSplit("notepad.exe|calc.exe", "|")
;Указываем числа для запуска программ(ы)
Global $aRun_Days = StringSplit("10,20,30", ",")
;Определяем последнюю дату запуска
Global $sLast_Run_Day = IniRead($sConfig_File, "Main", "Last Run Day", -1)
;Добавляем программу в автозапуск
If @Compiled = 1 Then
If RegRead("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName) = "" Then
$iAsk = MsgBox(266532, "", "Поместить программу в автозагрузку?")
If $iAsk = 6 Then _
RegWrite("HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", @ScriptName, "REG_SZ", '"' & @ScriptFullPath & '"')
EndIf
EndIf
;Запускаем функцию _Check_Run_Proc() каждые 5 секунд
AdlibEnable("_Check_Run_Proc", 5000)
Call("_Check_Run_Proc")
;Главный цикл
While 1
Switch TrayGetMsg()
Case $nExit_TrayItem
_Exit()
Case $nAbout_TrayItem
MsgBox(270400, "About", "Copyright (С) 2009", 5)
EndSwitch
WEnd
Func _Check_Run_Proc()
If @MDAY = $sLast_Run_Day Then Return
For $i = 1 To $aRun_Days[0]
If @MDAY = $aRun_Days[$i] Then
;Запоминаем последний день запуска
$sLast_Run_Day = $aRun_Days[$i]
;Запоминаем последний день запуска в ini-файл (на случай перезагрузки компьютера)
IniWrite($sConfig_File, "Main", "Last Run Day", $sLast_Run_Day)
;Задаём иконку значку в трее
TraySetIcon("Shell32.dll", 246)
;Запускаем программы (задачи)
Local $sTasks = ""
For $j = 1 To $aRun_Apps[0]
$sTasks &= $j & ". " & StringRegExpReplace($aRun_Apps[$j], "^.*\\", "") & @CRLF
Run($aRun_Apps[$j])
Next
;Показываем информацию о запуске
TrayTip("Планировщик...", "Запущенные задачи: " & @CRLF & $sTasks, 0, 1)
;Ждём 3 секунды
Sleep(3000)
;Задаём иконку значку в трее (обратно на изначальную)
TraySetIcon("Shell32.dll", 25)
ExitLoop
EndIf
Next
EndFunc
Func _Exit()
Exit
EndFunc
Для пропущенных дней нужно писать отдельную проверку, и как верно заметил
Diamond, это уже начинает походить на планировщик задач.