如何使用c ++在任务计划程序中检查任务的触发器?

时间:2019-02-08 06:48:30

标签: c++ windows winapi triggers taskscheduler

我想使用c ++在“任务计划程序”中检查任务的触发器。 我想使用功能 HRESULT get_Type(TASK_TRIGGER_TYPE2 * pType); 检查任务是登录还是引导触发。

TASK_STATE taskState;

for (LONG i = 0; i < numTasks; i++)
{
  IRegisteredTask* pRegisteredTask = NULL;
  hr = pTaskCollection->get_Item(_variant_t(i + 1), &pRegisteredTask);

 if (SUCCEEDED(hr))
    {
        BSTR taskName = NULL;
                    TASK_TRIGGER_TYPE2 *pType = NULL;
        hr = pRegisteredTask->get_Name(&taskName);               
        if (SUCCEEDED(hr))
        {
          printf("\nTask Name: %S", taskName);
          SysFreeString(taskName);
          hr = pRegisteredTask->get_Type(*pType);   //Implemented here
          if (SUCCEEDED(hr))
             printf("\n%s",&pType);
          else
             printf("\n\tCannot get the registered task state: %x", hr);
         } 

          hr = pRegisteredTask->get_State(&taskState);
          if (SUCCEEDED(hr))
       printf("\n\tState: %d", taskState);
          else
    printf("\n\tCannot get the registered task state: %x", hr);
        }
        else
        {
    printf("\nCannot get the registered task name: %x", hr);
        }
    pRegisteredTask->Release();
    }
    else
    {
printf("\nCannot get the registered task item at index=%d: %x", i + 1, hr);
    }
}

在编译时,它给我一个错误,说“ IRegisteredTask没有成员get_Type()”

然后我更改了代码并添加了  ITrigger * trig = NULL; trig-> get_Type(&pType);

但这也不给我任何价值

2 个答案:

答案 0 :(得分:2)

以下代码段对我有效,您可以尝试一下:

Get-Help Add-Computer -Online

请参阅“ Displaying Task Names and States (C++)

答案 1 :(得分:0)

documentation,看起来好像拥有IRegisteredTask之后,您需要调用get_Definition()以获得其ITaskDefinition。

使用ITaskDefinition,您可以通过get_Triggers()获得一个ITriggerCollection

然后,枚举ITriggerCollection,可以查询每个ITrigger的QueryInterface()来查看它是否支持ILogonTrigger或IBootTrigger接口。