Möchte mit Autoit ein Programm zu einem bestimmten Zeitpunkt starten (wie mit AT).
Wie kann ich dies realisieren?
AT-Befehl - schtasks
-
- [ gelöst ]
-
emeuv -
16. April 2009 um 10:02 -
Geschlossen -
Erledigt
-
-
Mit Autoit oder reicht der Windows-eigene Taskplaner?
-
[autoit]
[/autoit]
$time="14:23"
$prog="notepad.exe"
While True
Sleep(1000)
If $time= @HOUR & ":" & @MIN Then _run()
WEnd
Func _run()
Run($prog)
Exit
EndFunc -
[autoit]Alles anzeigen
[/autoit]
$time="14:23"
$prog="notepad.exe"
While True
Sleep(1000)
If $time= @HOUR & ":" & @MIN Then _run()
WEnd
Func _run()
Run($prog)
Exit
EndFunc
Danke es funktioniert -
@emuev
Könntest du die Themen die du Erstellt hast und gelöst sind bitte auf gelöst setzten? Sonst guck man immernoch nach ob man helfen kann^^ -
Mit Autoit oder reicht der Windows-eigene Taskplaner?
Wie kann ich den mit Autoit den Taskplaner setzen?
-
Vielleicht so... LINK
-
Danke ein sehr guter Hinweis.
Aber AT funktioniert nicht, er ist durch schtasks ersetzt wurden. -
Die Version mit WMI ist auch nicht zu verachten. Bin noch am testen...
Spoiler anzeigen
[autoit]Global $wbemFlagReturnImmediately = 0x10
[/autoit] [autoit][/autoit] [autoit]
Global $wbemFlagForwardOnly = 0x20Func _TaskAddScheduleWMI($hProgram, $sTime, $sDay = '********', $strComputer = "localhost", $iOccurrence = False, $sDaysofweek = '', $sDaysOfMonth = '', $bInteractive = False)
[/autoit] [autoit][/autoit] [autoit]
Local $iJobID, $sMsg, $iBais
If $sDay = '' Or $sDay = -1 Or $sDay = Default Then $sDay = '********'
If $strComputer = '' Or $strComputer = -1 Or $strComputer = Default Then $strComputer = 'localhost'
$iBais = $sDay & $sTime & '.000000' & "-" & _TimeZoneGetBiasWMI($strComputer)
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$objNewJob = $objWMIService.Get("Win32_ScheduledJob")
; msgbox(0,"",$hProgram & ', ' & $iBais & ', ' & $iOccurrence & ', ' & $sDaysofweek & ', ' & $sDaysOfMonth & ', ' & $bInteractive & @CRLF)
$iReturnCode = $objNewJob.Create($hProgram, $iBais, True, $sDaysofweek, $sDaysOfMonth, $bInteractive, $iJobID)
If $iReturnCode = 0 Then
Return (SetError(0, $iReturnCode, $iJobID))
Else
$sMsg = _TaskScheduleGetReturnValue($iReturnCode)
Return (SetError(1, $iReturnCode, $sMsg))
EndIf
EndFunc ;==>_TaskAddScheduleWMI; #FUNCTION#;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; Name...........: _TaskGetScheduledWMI
; Description ...: Returns an array of scheduled tasks.
; Syntax.........: _TaskGetScheduledWMI()
; Parameters ....:
; Return values .: Success - Returns the list of scheduled tasks.
; Failure - Sets @Error:
; |1 - No WMI Objects Found
; Author ........: Danny35d
; Modified.......:
; Remarks .......:
; Related .......: _TaskAddScheduleWMI(), _TaskDelScheduleWMI()
; Link ..........;
; Example .......; Yes
;
;;==========================================================================================
Func _TaskGetScheduledWMI($strComputer = 'localhost')
Local $iCount = 1
Dim $Output[1][20]
If $strComputer = '' Or $strComputer = -1 Or $strComputer = Default Then $strComputer = 'localhost'
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ScheduledJob", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)If IsObj($colItems) Then
[/autoit] [autoit][/autoit] [autoit]
For $objItem In $colItems
ReDim $Output[UBound($Output) + 1][20]
$Output[$iCount][1] = $objItem.Caption
$Output[$iCount][2] = $objItem.Command
$Output[$iCount][3] = _GetDaysOfMonth($objItem.DaysOfMonth)
$Output[$iCount][4] = _GetDaysOfWeek($objItem.DaysOfWeek)
$Output[$iCount][5] = $objItem.Description
$Output[$iCount][6] = WMIDateStringToDate($objItem.ElapsedTime)
$Output[$iCount][7] = WMIDateStringToDate($objItem.InstallDate)
$Output[$iCount][8] = _GetBoolean($objItem.InteractWithDesktop)
$Output[$iCount][9] = $objItem.JobId
$Output[$iCount][10] = $objItem.JobStatus
$Output[$iCount][11] = $objItem.Name
$Output[$iCount][12] = $objItem.Notify
$Output[$iCount][13] = $objItem.Owner
$Output[$iCount][14] = $objItem.Priority
$Output[$iCount][15] = _GetBoolean($objItem.RunRepeatedly)
$Output[$iCount][16] = WMIDateStringToDate($objItem.StartTime)
$Output[$iCount][17] = $objItem.Status
$Output[$iCount][18] = WMIDateStringToDate($objItem.TimeSubmitted)
$Output[$iCount][19] = WMIDateStringToDate($objItem.UntilTime)
$iCount += 1
Next
If UBound($Output) - 1 Then
$Output[0][0] = UBound($Output) - 1
Else
$Output = ''
EndIf
Else
Return (SetError(1, 1, 'No WMI Objects Found for class: Win32_ScheduledJob'))
EndIf
Return ($Output)
EndFunc ;==>_TaskGetScheduledWMI; #FUNCTION#;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; Name...........: _TaskDelScheduleWMI
; Description ...: Deletes a scheduled task or all schedule task.
; Syntax.........: _TaskDelScheduleWMI($strComputer = 'localhost', $iJobID = -1, $iDelAll = False)
; Parameters ....: $sName - The name of the computer to execute the deletion on.
; $iID - [Optional] The id of the task to delete. If blank will delete the first scheduled task.
; $iDelete - [Optional] Integer value to determine deletion type. If 0 will delete all tasks, 1 will delete on the specified task.
; Return values .: Success - Deletes the specified task.
; Failure - Sets @Error:
; |1 -
; Author ........: Danny35d
; Modified.......:
; Remarks .......:
; Related .......: _TaskAddScheduleWMI(), _TaskGetSchedule()
; Link ..........;
; Example .......; Yes
;
;;==========================================================================================
Func _TaskDelScheduleWMI($strComputer = 'localhost', $iJobID = -1, $iDelAll = False)
Local $iReturnCode, $iError = 1, $sMsg, $iFoundID = False
If $iJobID = '' Or $iJobID = Default Then $iJobID = -1
If $strComputer = '' Or $strComputer = -1 Or $strComputer = Default Then $strComputer = 'localhost'
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_ScheduledJob", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)If IsObj($colItems) Then
[/autoit] [autoit][/autoit] [autoit]
For $objItem In $colItems
$intJobID = $objItem.JobId
If $iJobID = $intJobID Or $iDelAll Then
$iFoundID = True
$objInstance = $objWMIService.Get('Win32_ScheduledJob.JobID=' & $intJobID)
$iReturnCode = $objInstance.Delete
EndIf
Next
Else
Return (SetError(1, 3, 'No WMI Objects Found for class: Win32_ScheduledJob'))
EndIf
If Not $iFoundID Then $iReturnCode = 4
If $iReturnCode = 0 Then $iError = 0
$sMsg = _TaskScheduleGetReturnValue($iReturnCode)
Return (SetError($iError, $iReturnCode, $sMsg))
EndFunc ;==>_TaskDelScheduleWMIFunc WMIDateStringToDate($dtmDate)
[/autoit] [autoit][/autoit] [autoit]
If $dtmDate = '' Then
Return ($dtmDate)
Else
Return (StringMid($dtmDate, 5, 2) & "/" & _
StringMid($dtmDate, 7, 2) & "/" & StringLeft($dtmDate, 4) _
& " " & StringMid($dtmDate, 9, 2) & ":" & StringMid($dtmDate, 11, 2) & ":" & StringMid($dtmDate, 13, 2))
EndIf
EndFunc ;==>WMIDateStringToDate; #FUNCTION#;===============================================================================
[/autoit] [autoit][/autoit] [autoit]
;
; Name...........: _TimeZoneGetBiasWMI
; Description ...: Returns current bias for local time translation. formula: UTC = local time - bias.
; Syntax.........: _TimeZoneGetBiasWMI() or _TimeZoneGetBiasWMI('RemoteComputerName')
; Parameters ....:
; Return values .: Success - Returns Bias time.
; Failure - Sets @Error:
; |1 - Command Failed
; Author ........: Danny35d
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......; Yes
;
;;==========================================================================================
Func _TimeZoneGetBiasWMI($strComputer = 'localhost')
Local $iBais, $iDayLightBais
$objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
$colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_TimeZone", "WQL", _
$wbemFlagReturnImmediately + $wbemFlagForwardOnly)If IsObj($colItems) Then
[/autoit] [autoit][/autoit] [autoit]
For $objItem In $colItems
$iBais = $objItem.Bias
$iDayLightBais = $objItem.DaylightBias
Next
Else
Return (SetError(1, 'No WMI Objects Found for class: Win32_TimeZone', ''))
EndIf
Return (Execute($iBais & ' - ' & $iDayLightBais))
EndFunc ;==>_TimeZoneGetBiasWMIFunc _GetBoolean($iBoolean)
[/autoit] [autoit][/autoit] [autoit]
If Not $iBoolean Then
Return (False)
Else
Return (True)
EndIf
EndFunc ;==>_GetBooleanFunc _TaskScheduleGetReturnValue($iReturnCode)
[/autoit] [autoit][/autoit] [autoit]
Local $sMsg
Switch $iReturnCode
Case 0
$sMsg = 'The request was accepted.'
Case 1
$sMsg = 'The request is not supported.'
Case 2
$sMsg = 'The user did not have the necessary access.'
Case 4
$sMsg = 'Job ID not found.'
Case 8
$sMsg = 'Interactive process.'
Case 9
$sMsg = 'The directory path to the service executable file was not found.'
Case 21
$sMsg = 'Invalid parameters have been passed to the service.'
Case 22
$sMsg = 'The account which this service is to run under is either invalid or lacks the permissions to run the service.'
EndSwitch
Return ($sMsg)
EndFunc ;==>_TaskScheduleGetReturnValueFunc _GetDaysOfMonth($iDaysOfMonth)
[/autoit] [autoit][/autoit] [autoit]
Local $sDaysOfMonth
Local $aDaysOfMonth = _GetPower2(31)
For $x = $aDaysOfMonth[0] To 1 Step -1
If $aDaysOfMonth[$x] <= $iDaysOfMonth Then
$iDaysOfMonth = $iDaysOfMonth - $aDaysOfMonth[$x]
$sDaysOfMonth = $x & ', ' & $sDaysOfMonth
EndIf
If $iDaysOfMonth = 0 Then ExitLoop
Next
$sDaysOfMonth = StringTrimRight($sDaysOfMonth, 2)
Return ($sDaysOfMonth)
EndFunc ;==>_GetDaysOfMonthFunc _GetDaysOfWeek($iDayOfWeek = 1)
[/autoit] [autoit][/autoit] [autoit]
Local $sDayOfWeek, $sText
Local $aDays = _GetPower2(7)
For $x = $aDays[0] To 1 Step -1
If $aDays[$x] <= $iDayOfWeek Then
$iDayOfWeek = $iDayOfWeek - $aDays[$x]
Switch $aDays[$x]
Case 1
$sText = 'Monday'
Case 2
$sText = 'Tuesday'
Case 4
$sText = 'Wednesday'
Case 8
$sText = 'Thursday'
Case 16
$sText = 'Friday'
Case 32
$sText = 'Saturday'
Case 64
$sText = 'Sunday'
EndSwitch
$sDayOfWeek = $sText & ', ' & $sDayOfWeek
EndIf
If $iDayOfWeek = 0 Then ExitLoop
Next
$sDayOfWeek = StringTrimRight($sDayOfWeek, 2)
Return ($sDayOfWeek)
EndFunc ;==>_GetDaysOfWeekFunc _GetPower2($iMaxPower2)
[/autoit]
Dim $aPower2[$iMaxPower2 + 1]
$aPower2[0] = $iMaxPower2
For $x = 1 To $iMaxPower2
$aPower2[$x] = 2 ^ ($x - 1)
Next
Return ($aPower2)
EndFunc ;==>_GetPower2Edit: Irgendwas haut beim Erstellen mit der/den (unterschiedlichen) Zeitzone(n) nicht hin... Auf einem PC klappts, auf dem anderen bekomme ich eine Fehler !