Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Запуск определенной программы через n времени??? (http://forum.oszone.net/showthread.php?t=150699)

Anarasius 16-09-2009 16:56 1220349

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

Creat0R 16-09-2009 22:27 1220607

Цитата:

Цитата Anarasius
Нужен скрипт, который постоянно сидел бы в системном трее и через каждые 2 недели запускал программу (или каждый месяц 10 и 20 числа) »

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

Код:

#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"

While 1
    If @MDAY = 10 Then
        Run($sApp)

        While @MDAY = 10
            Sleep(60000)
        WEnd
    EndIf

    Sleep(1000)
WEnd


Anarasius 16-09-2009 23:18 1220647

Все отлично, но он у меня бесконечно запускает программу через каждую сек

Creat0R 16-09-2009 23:30 1220653

Цитата:

Цитата Anarasius
он у меня бесконечно запускает программу через каждую сек »

Если 10-ое число? В поставленной задачи ничего не сказано по поводу одноразового запуска :)

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

Anarasius 16-09-2009 23:49 1220658

Всеравно, я ставлю сегодняшнее число и запускаю скрипт он начинает бесконечно открывать блокнот, попробуйте сами!

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

Creat0R 17-09-2009 00:04 1220666

А так:

Код:

#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"

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

While 1
    If @MDAY = $nDay Then
        Run($sApp)

        While @MDAY = $nDay
            Sleep(60000)
        WEnd
    EndIf

    Sleep(1000)
WEnd

?

Diamond 17-09-2009 01:15 1220709

Я бы добавил последнюю дату запуска в реестр или в 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 1221474

Цитата:

Цитата Anarasius
И если комп был в это время выключен то программа должна запуститься при его включении. Заранее спасибо! »

Все самое главное забыли :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 1221522

Цитата:

Цитата FlatX007
Все самое главное забыли »

И что это? добавление в автозапуск?

Diamond 18-09-2009 04:41 1221530

Цитата:

Цитата FlatX007
Цитата:

Цитата Anarasius
И если комп был в это время выключен то программа должна запуститься при его включении. Заранее спасибо!

Все самое главное забыли »

Я так понял... если запуск на запланированное число был пропущен(например если компьютер в этот день ни разу не включали), то нужно запустить программу как только это станет возможным, т.е. уже не зависимо от назначенного числа.

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

Anarasius 18-09-2009 12:24 1221738

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

FlatX007 18-09-2009 17:16 1221927

Цитата:

Цитата Anarasius
(это если вместо 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 1222910

хмм, программа при наступлении нужной даты запускается целый день т.е. если у меня настало 10 число программа запустилась, перезагружаю опять запустилась, как это убрать т.е.что бы программа запускалась только один раз при наступлении даты.

FlatX007 20-09-2009 01:12 1222939

В шапке темы об этом не слова!

Creat0R 20-09-2009 01:31 1222949

Цитата:

Цитата 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, это уже начинает походить на планировщик задач.


Время: 22:21.

Время: 22:21.
© OSzone.net 2001-