使用命令行打开Windows计划任务Gui属性

时间:2015-03-09 20:59:00

标签: windows delphi scheduled-tasks

我正在创建一个Delphi组件,使用 schtasks 中的命令行在Windows中安排任务。

我怀疑是: 创建任务的基本框架后,我想通过Windows任务编辑器打开它们的属性。

我还没有找到一种方法来调用我创建标准Windows界面的任务的属性。

也许有人可以帮助我?

图片示例:

Sample task property

2 个答案:

答案 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;

谢谢大家的帮助。