我正在创建一个Delphi组件,使用 schtasks 中的命令行在Windows中安排任务。
我怀疑是: 创建任务的基本框架后,我想通过Windows任务编辑器打开它们的属性。
我还没有找到一种方法来调用我创建标准Windows界面的任务的属性。
也许有人可以帮助我?
图片示例:
答案 0 :(得分:1)
我不知道,也找不到,在UI中打开特定任务的方法。您可以使用taskschd.msc
打开任务计划程序UI,但这不会打开特定任务。
所以我担心你必须自己构建一些UI。然后,您可以使用API更改属性。更改属性也可以通过schtasks
完成。它有几个命令行选项,其中一个是
/Change - Changes the properties of scheduled task.
使用schtasks /Change /?
,您可以获得有关change参数的更多详细信息,以及需要指定哪些其他参数来更改特定任务属性。不幸的是,似乎没有打开GUI的参数。
如果您觉得足够勇敢,可以使用Scheduler API functions代替schtasks
命令行工具。 :)
答案 1 :(得分:1)
经过测试,我将使用Windows API和JCL Abstraction(MsTask.pas)找到解决方案。
我根据链接示例制作了我的代码: 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;
谢谢大家的帮助。