; 注意:计划任务的优先级很高,会在系统初加载时启动。过早的启动会影响功能
; AHK脚本以管理员权限自启
if !A_IsAdmin && !RegExMatch(_:=DllCall("GetCommandLine", "Str"), " /restart(?!\S)") {
RunWait % "*RunAs " RegExReplace(_, "^\"".*?\""\K|^\S*\K", " /restart")
ExitApp
}
; 判断自启任务是否存在,不存在就添加到自启任务中
if !IsAutorunEnabled("YouTaskName")
MsgBox % SetAutoTaskRun("YouTaskName", "D:\Program Files (x86)\AHKEditor\AHKEditor.exe")
; MsgBox % "删除自启计划任务:" DisableAutorun("YouTaskName")
; By 蜜獾哥
; 判断自启任务是否存在,返回状态1为存在反之
IsAutorunEnabled(TaskName) {
objService := ComObjCreate("Schedule.Service")
objService.Connect()
objFolder := objService.GetFolder("\")
Try {
RunAsTask := objFolder.GetTask( TaskName )
return !A_LastError
}
}
; 添加自启任务,如果自启任务存在时,会取消此自启任务【不填写路径则为启动此脚本自身】
SetAutoTaskRun(taskName:="任务名", taskPath:="", DescriptionInfo:="计划任务说明", TaskState:=3) {
TaskExists := IsAutorunEnabled(taskName)
if (A_IsAdmin and TaskExists) {
if DisableAutorun(TaskName)
Return (taskName "@自启任务已取消!")
} else If ( not A_IsAdmin and TaskExists ) {
Return ("权限不足无法取消自启任务!")
} else If ( not A_IsAdmin and not TaskExists ) {
Return ("权限不足无法建立自启任务!")
} else If ( A_IsAdmin and not TaskExists ) {
TriggerType := 9
ActionTypeExec := 0
TaskCreateOrUpdate := 6
Task_Runlevel_Highest := 1
objService := ComObjCreate("Schedule.Service")
objService.Connect()
objFolder := objService.GetFolder("\")
objTaskDefinition := objService.NewTask(0)
principal := objTaskDefinition.Principal
principal.LogonType := 1
principal.RunLevel := Task_Runlevel_Highest
colTasks := objTaskDefinition.Triggers
objTrigger := colTasks.Create(TriggerType)
colActions := objTaskDefinition.Actions
objAction := colActions.Create(ActionTypeExec)
objAction.ID := "7plus Autorun"
if (taskPath="") {
if (A_IsCompiled)
objAction.Path := """" A_ScriptFullPath """"
else {
objAction.Path := """" A_AhkPath """"
objAction.Arguments := """" A_ScriptFullPath """"
}
} else
objAction.Path := """" taskPath """"
objAction.WorkingDirectory := A_ScriptDir
objInfo := objTaskDefinition.RegistrationInfo
objInfo.Author := A_UserName
objInfo.Description := DescriptionInfo
objSettings := objTaskDefinition.Settings
objSettings.Enabled := True
objSettings.Hidden := False
objSettings.StartWhenAvailable := True
objSettings.ExecutionTimeLimit := "PT0S"
objSettings.DisallowStartIfOnBatteries := False
objSettings.StopIfGoingOnBatteries := False
objFolder.RegisterTaskDefinition(taskName, objTaskDefinition, TaskCreateOrUpdate , "", "", TaskState )
if IsAutorunEnabled(taskName)
Return (taskName "@自启任务已建立!")
}
}
; 删除自启计划任务,返回状态1为成功反之
DisableAutorun(TaskName) {
objService := ComObjCreate("Schedule.Service")
objService.Connect()
objFolder := objService.GetFolder("\")
Try {
objFolder.DeleteTask(TaskName, 0)
Return !A_LastError
}
}
; 根据任务名获取任务完整执行路径参数,返回数组
GetTaskActionExecPaths(taskName, folderPath := "\") {
service := ComObjCreate("Schedule.Service")
service.Connect()
Try {
Paths:=[]
for action in service.GetFolder(folderPath).GetTask(taskName).Definition.Actions
if (action.Type ==0)
Paths.Push(RegExReplace(action.Path,"[\""""]"))
Return Paths
}
}
; 获取系统计划任务列表
GetTaskList() {
objService := ComObjCreate("Schedule.Service")
objService.Connect()
rootFolder := objService.GetFolder("\")
taskCollection := rootFolder.GetTasks(0)
numberOfTasks := taskCollection.Count
For registeredTask, state in taskCollection {
if (registeredTask.state == 0)
state:= "Unknown"
else if (registeredTask.state == 1)
state:= "Disabled"
else if (registeredTask.state == 2)
state:= "Queued"
else if (registeredTask.state == 3)
state:= "Ready"
else if (registeredTask.state == 4)
state:= "Running"
tasklist .= registeredTask.Name "=" state "=" registeredTask.state "`n"
}
return tasklist
}
声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。

评论(0)