dbzfanatic Posted October 27, 2008 Share Posted October 27, 2008 (edited) Well I saw that someone wanted a UDF for the windows Task Scheduler so I decided to try my hand at it. expandcollapse popup#cs ---------------------------------------------------------------------------- AutoIt Version: 3.2.13.7 (beta) Author: dbzfanatic Script Function: Task Scheduler UDF (Task.au3) #ce ---------------------------------------------------------------------------- Global $sRet ; #FUNCTION#;=============================================================================== ; ; Name...........: _TaskSchedule ; Description ...: Adds a scheduled task. ; Syntax.........: _TaskSchedule($sDay, $sTime, $hProgram, $sName, $iID, $bInteractive, $iOccurrence) ; Parameters ....: $sDay - The day(s) to run the task. (ex. M, T, Th; 1, 2, 3, 15, 22) ; $sTime - The time to run the program. ; $hProgram - Path to the program/batch file to run. ; $sName - [Optional] The name of the computer on which to schedule the task. ; $iID - [Optional] The id to give the specified task. ; $bInteractive - [Optional] Boolean value to allow interaction with the desktop ; $iOccurrence - [Optional] Determines how often the program/batch file is run. ;~ |1 - Every day ;~ |2 - Once ; Return values .: Success - Deletes the specified task. ; Failure - Sets @Error: ; |1 - Invalid $sName ; |2 - Invalid $sTime ; |3 - Invalid $iID ; |4 - Invalid $bInteractive ; |5, 7 - Invalid $iOccurrence ; |6 - Invalid $hProgram ; |16 - Command failed ; Author ........: Michael Duane LaBruyere (dbzfanatic) ; Modified.......: ; Remarks .......: ; Related .......: _TaskDelete(), _TaskGetSchedule() ; Link ..........; ; Example .......; Yes ; ;;========================================================================================== Func _TaskSchedule($sDay, $sTime, $hProgram, $sName = "", $iID = 1, $bInteractive = True, $iOccurrence = 1) Local $sInteract, $sOccur, $hRun If Not IsString($sName) Then Return SetError(1) EndIf If Not IsString($sTime) Then Return SetError(2) EndIf If Not IsInt($iID) Then Return SetError(3) EndIf If Not IsBool($bInteractive) Then Return SetError(4) EndIf If Not IsInt($iOccurrence) Then Return SetError(5) EndIf If $hProgram = "" Then Return SetError(6) EndIf If $bInteractive = True Then $sInteract = "/interactive" Else $sInteract = "" EndIf If $iOccurrence = 1 Then $sOccur = "/every:" & $sDay ElseIf $iOccurrence = 2 Then $sOccur = "/next:" & $sDay Else Return SetError(7) EndIf $hRun = Run("cmd.exe /c at " & $sName & " " & $iID & " " & " " & $sDay & " " & $sInteract & " " & $sOccur & " " & $hProgram, @SystemDir, @SW_HIDE) While ProcessExists("cmd.exe") $sRet = StdoutRead($hRun, True) WEnd If $hRun = 0 Then Return SetError(16) EndIf Return $sRet EndFunc;==>_TaskSchedule ; #FUNCTION#;=============================================================================== ; ; Name...........: _TaskGetScheduled ; Description ...: Returns a list of scheduled tasks. ; Syntax.........: _TaskGetScheduled() ; Parameters ....: ; Return values .: Success - Returns the list of scheduled tasks. ; Failure - Sets @Error: ; |1 - Command Failed ; Author ........: Michael Duane LaBruyere (dbzfanatic) ; Modified.......: ; Remarks .......: ; Related .......: _TaskSchedule(), _TaskDelete() ; Link ..........; ; Example .......; Yes ; ;;========================================================================================== Func _TaskGetScheduled() Local $hAt $hAt = Run("cmd.exe /c at", @SystemDir, @SW_HIDE, 8) While ProcessExists("cmd.exe") $sRet = StdoutRead($hAt, True) WEnd If $hAt = 0 Then Return SetError(1) EndIf Return $sRet EndFunc;==>_TaskGetScheduled ; #FUNCTION#;=============================================================================== ; ; Name...........: _TaskDelete ; Description ...: Deletes a scheduled task. ; Syntax.........: _TaskDelete($sName, $iID, $iDelete) ; 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 - Invalid $iDelete ; |2 - Invalid $iID ; |3 - Invalid $sName ; |4 - Command Failed ; Author ........: Michael Duane LaBruyere (dbzfanatic) ; Modified.......: ; Remarks .......: ; Related .......: _TaskSchedule(), _TaskGetSchedule() ; Link ..........; ; Example .......; Yes ; ;;========================================================================================== Func _TaskDelete($sName, $iID = 1, $iDelete = 1) Local $hDel, $sDelete If Not IsInt($iDelete) Then Return SetError(1) EndIf If Not IsInt($iID) Then Return SetError(2) EndIf If Not IsString($sName) Then Return SetError(3) EndIf If $iDelete = 0 Then $sDelete = "/sDelete /yes" ElseIf $iDelete = 1 Then $sDelete = "/sDelete " & $iID & " /yes" EndIf $hDel = Run("cmd.exe /c at " & $sName & " " & $sDelete, @SystemDir, @SW_HIDE, 8) While ProcessExists("cmd.exe") $sRet = StdoutRead($hDel, True) WEnd If $hDel = 0 Then Return SetError(4) EndIf Return $sRet EndFunc;==>_TaskDelete Examples: #include <Task.au3> $Return = _TaskGetScheduled() MsgBox(41,"Scheduled Tasks",$Return) more examples soon. Hope you guys like it. Edit: Edited the UDF, I forgot to add a field for the program/batch file path >.>; Edit 2: Found another problem. Sorry for all this, I'm 90% asleep and I need coffee . Update: 10/28/08 - Updated to comply with UDF standards. Edited October 28, 2008 by dbzfanatic Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
Andreik Posted October 27, 2008 Share Posted October 27, 2008 I didn't tested yet, but if it works properly will be very useful. When the words fail... music speaks. Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 27, 2008 Author Share Posted October 27, 2008 I haven't been able to test fully either but things work ok here. Please tell me if anything doesn't work and I'll do my best to fix it. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
Emiel Wieldraaijer Posted October 27, 2008 Share Posted October 27, 2008 Hi.. ik like this UDF but isn't at.exe replaced by schtask.exe ? (or will be replaced?) Best regards, Emiel Best regards,Emiel Wieldraaijer Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 28, 2008 Author Share Posted October 28, 2008 I'm not really sure. The at commands run fine here so I didn't even know about schtask.exe, I'll look into it for a future update in case at really will be replaced. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
spudw2k Posted October 28, 2008 Share Posted October 28, 2008 type schtasks.exe /? at a cmd prompt to see the syntax. It's very useful. Once upon a time, I started writing my own little gui for it but didn't get that far with with. It only lists scheduled tasks. I never finished it. Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retrieve SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc Cool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF  Link to comment Share on other sites More sharing options...
ken82m Posted October 28, 2008 Share Posted October 28, 2008 I would be the whiner lol Thanks  "I believe that when we leave a place, part of it goes with us and part of us remains... Go anywhere, when it is quiet, and just listen.. After a while, you will hear the echoes of all our conversations, every thought and word we've exchanged.... Long after we are gone our voices will linger in these walls for as long as this place remains." Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 28, 2008 Author Share Posted October 28, 2008 I'll see what I can do, I was just informed by ken82m in another thread that the task scheduler has a COM element so I may look into that instead of using commands. This is actually what I probably will do but for the time being commands are what I'll use. Thank you everyone for your feedback and please feel free to leave any more. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
Emiel Wieldraaijer Posted October 28, 2008 Share Posted October 28, 2008 I'll see what I can do, I was just informed by ken82m in another thread that the task scheduler has a COM element so I may look into that instead of using commands. This is actually what I probably will do but for the time being commands are what I'll use. Thank you everyone for your feedback and please feel free to leave any more. That would be even better ThanksEmiel Best regards,Emiel Wieldraaijer Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 28, 2008 Author Share Posted October 28, 2008 Well I'm trying to find info on the COM but the MSDN isn't really giving me much help right now. For some of the actions I know you need schtask.dll and/or Vista but that's all I've managed to find out. I haven't really been able to find anything about what I need for ObjCreate() or ObjGet(). If anyone has a link I'd appreciate it >.>; Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
spudw2k Posted October 28, 2008 Share Posted October 28, 2008 (edited) Well I'm trying to find info on the COM but the MSDN isn't really giving me much help right now. For some of the actions I know you need schtask.dll and/or Vista but that's all I've managed to find out. I haven't really been able to find anything about what I need for ObjCreate() or ObjGet(). If anyone has a link I'd appreciate it >.>;Click Here Edited October 28, 2008 by spudw2k Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retrieve SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc Cool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF  Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 28, 2008 Author Share Posted October 28, 2008 I found that already, what I really dont know (I'm entirely new to COM) is what to use for the call, like InternetExplorer.Application.1, is it a shell call? would it be like Shell.Task.action? Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
spudw2k Posted October 28, 2008 Share Posted October 28, 2008 I found that already, what I really dont know (I'm entirely new to COM) is what to use for the call, like InternetExplorer.Application.1, is it a shell call? would it be like Shell.Task.action?O, sorry. I think it'd be either ObjCreate or ObjGet. I don't know squa about c++ so converting code wont be an easy task for me. Spoiler Things I've Made: Always On Top Tool ◊ AU History ◊ Deck of Cards ◊ HideIt ◊ ICU ◊ Icon Freezer ◊ Ipod Ejector ◊ Junos Configuration Explorer ◊ Link Downloader ◊ MD5 Folder Enumerator ◊ PassGen ◊ Ping Tool ◊ Quick NIC ◊ Read OCR ◊ RemoteIT ◊ SchTasksGui ◊ SpyCam ◊ System Scan Report Tool ◊ System UpTime ◊ Transparency Machine ◊ VMWare ESX Builder Misc Code Snippets: ADODB Example ◊ CheckHover ◊ Detect SafeMode ◊ DynEnumArray ◊ GetNetStatData ◊ HashArray ◊ IsBetweenDates ◊ Local Admins ◊ Make Choice ◊ Recursive File List ◊ Remove Sizebox Style ◊ Retrieve PNPDeviceID ◊ Retrieve SysListView32 Contents ◊ Set IE Homepage ◊ Tickle Expired Password ◊ Transpose Array Projects: Drive Space Usage GUI ◊ LEDkIT ◊ Plasma_kIt ◊ Scan Engine Builder ◊ SpeeDBurner ◊ SubnetCalc Cool Stuff: AutoItObject UDF ◊ Extract Icon From Proc ◊ GuiCtrlFontRotate ◊ Hex Edit Funcs ◊ Run binary ◊ Service_UDF  Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 28, 2008 Author Share Posted October 28, 2008 I know I need one of those I just don't know what exactly to use. I know once the object is gotten or created I can do $oTask.Action (object.desired_action) to manipulate the object, I just don't know the object I need. Like I said I don't know if it's a shell object or...anything. I'm utterly lost but if I could just find something that would tell me the object I need I could go from there. I looked in the OLE/COM object viewer but didn't really see anything about task scheduler. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
Emiel Wieldraaijer Posted October 28, 2008 Share Posted October 28, 2008 http://www.microsoft.com/technet/scriptcen...04/hey0922.mspx Best regards,Emiel Wieldraaijer Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 28, 2008 Author Share Posted October 28, 2008 Ok this looks helpful thank you . From what I can see I need to use GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") I updated the first post with a more UDF compliant version as well. Thank you all for your feedback and help, keep it coming. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 29, 2008 Author Share Posted October 29, 2008 Ok, from what I can see in order to use the scripting COM API for Task Scheduler the client has to be vista. I want this to be more universal so I think I'll leave it with commands for now. I might update it a bit more with schtask.exe or just make it a bit more streamlined but I don't know when that's going to be. Hope you all like it as-is for now . Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
Emiel Wieldraaijer Posted October 29, 2008 Share Posted October 29, 2008 ? http://msdn.microsoft.com/en-us/library/aa383581(VS.85).aspx2000 and Higher Best regards,Emiel Wieldraaijer Link to comment Share on other sites More sharing options...
dbzfanatic Posted October 30, 2008 Author Share Posted October 30, 2008 I've looked at that but when you look at the references then actions it says "Minimum Supported Client: Windows Vista" so that's why I said that. Go to my website. | My Zazzle Page (custom products)Al Bhed Translator | Direct linkScreenRec ProSimple Text Editor (STE) [TUTORIAL]Task Scheduler UDF <--- First ever UDF!_ControlPaste() UDF[quote name='renanzin' post='584064' date='Sep 26 2008, 07:00 AM']whats help ?[/quote] Link to comment Share on other sites More sharing options...
Emiel Wieldraaijer Posted October 30, 2008 Share Posted October 30, 2008 I've looked at that but when you look at the references then actions it says "Minimum Supported Client: Windows Vista" so that's why I said that.Strange http://msdn.microsoft.com/en-us/library/aa383614(VS.85).aspx"Task Scheduler 1.0: Client requires Windows Vista, Windows XP, Windows 2000 Professional, Windows Me, or Windows 98. Server requires Windows Server 2008, Windows Server 2003 or Windows 2000 Server. " Best regards,Emiel Wieldraaijer Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now