使用命令行打开 Windows 计划任务 Gui 属性
Open Windows Schedule Task Gui Properties with command line
我正在创建一个 Delphi 组件来使用来自 schtasks.
的命令行在 Windows 中安排任务
我的疑问是:
创建任务的基本框架后,我想通过 Windows 任务编辑器打开它们的属性。
我还没有找到调用任务属性的方法,我创建了标准 Windows 接口。
也许有人可以帮助我?
图片样本:
我不知道,也找不到在 UI 中打开特定任务的方法。您可以使用 taskschd.msc
打开任务计划程序 UI,但这不会打开特定任务。
所以恐怕您必须自己构建一些 UI。您可以使用 API 然后更改属性。也可以通过 schtasks
更改属性。它有几个命令行选项,其中之一是
/Change - Changes the properties of scheduled task.
使用 schtasks /Change /?
,您可以获得有关更改参数的更多详细信息,以及您需要指定哪些附加参数来更改特定任务属性。不幸的是,似乎没有打开 GUI.
的参数
如果您够勇敢,可以使用 Scheduler API functions 而不是 schtasks
命令行工具。 :)
经过测试,我将找到使用 Windows API 和 JCL 抽象 (MsTask.pas) 的解决方案。
我根据link的例子编写了我的代码:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa446830(v=vs.85).aspx
下面是编辑特定任务的方法的完整示例:
Uses MSTask{JCL Abstraction}, ActiveX;
Procedure TForm7.EditTask(ATaskName: String);
Var
LTask: ITask;
LSchedulingAgent: ITaskScheduler;
LOutAux: IInterface;
Var
LResult: HRESULT;
Begin
//Get scheduler object
LResult := CoCreateInstance(CLSID_CTaskScheduler,
Nil,
CLSCTX_INPROC_SERVER,
IID_ITaskScheduler,
LSchedulingAgent);
If LResult = S_OK Then
Begin
//get task object
LResult := LSchedulingAgent.Activate(PWideChar(ATaskName), IID_ITask, LOutAux);
If LResult = S_OK Then
Begin
LTask := ITask(LOutAux);
LTask.EditWorkItem(0, 0);
End
Else
ShowMessage('TaskName not found!');
End
Else
ShowMessage('Error to get scheduler object.');
End;
谢谢大家的帮助。
我正在创建一个 Delphi 组件来使用来自 schtasks.
的命令行在 Windows 中安排任务我的疑问是: 创建任务的基本框架后,我想通过 Windows 任务编辑器打开它们的属性。
我还没有找到调用任务属性的方法,我创建了标准 Windows 接口。
也许有人可以帮助我?
图片样本:
我不知道,也找不到在 UI 中打开特定任务的方法。您可以使用 taskschd.msc
打开任务计划程序 UI,但这不会打开特定任务。
所以恐怕您必须自己构建一些 UI。您可以使用 API 然后更改属性。也可以通过 schtasks
更改属性。它有几个命令行选项,其中之一是
/Change - Changes the properties of scheduled task.
使用 schtasks /Change /?
,您可以获得有关更改参数的更多详细信息,以及您需要指定哪些附加参数来更改特定任务属性。不幸的是,似乎没有打开 GUI.
如果您够勇敢,可以使用 Scheduler API functions 而不是 schtasks
命令行工具。 :)
经过测试,我将找到使用 Windows API 和 JCL 抽象 (MsTask.pas) 的解决方案。
我根据link的例子编写了我的代码: https://msdn.microsoft.com/en-us/library/windows/desktop/aa446830(v=vs.85).aspx
下面是编辑特定任务的方法的完整示例:
Uses MSTask{JCL Abstraction}, ActiveX;
Procedure TForm7.EditTask(ATaskName: String);
Var
LTask: ITask;
LSchedulingAgent: ITaskScheduler;
LOutAux: IInterface;
Var
LResult: HRESULT;
Begin
//Get scheduler object
LResult := CoCreateInstance(CLSID_CTaskScheduler,
Nil,
CLSCTX_INPROC_SERVER,
IID_ITaskScheduler,
LSchedulingAgent);
If LResult = S_OK Then
Begin
//get task object
LResult := LSchedulingAgent.Activate(PWideChar(ATaskName), IID_ITask, LOutAux);
If LResult = S_OK Then
Begin
LTask := ITask(LOutAux);
LTask.EditWorkItem(0, 0);
End
Else
ShowMessage('TaskName not found!');
End
Else
ShowMessage('Error to get scheduler object.');
End;
谢谢大家的帮助。