如何使用 c++ 在任务计划程序中检查任务的触发器
How to check trigger of a task in Task scheduler using c++?
我想使用 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("ntCannot get the registered task state: %x", hr);
}
hr = pRegisteredTask->get_State(&taskState);
if (SUCCEEDED(hr))
printf("ntState: %d", taskState);
else
printf("ntCannot 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(;
但这也没有给我任何价值
以下是代码片段的工作,你可以试试:
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;
hr = pRegisteredTask->get_Name(&taskName);
if (SUCCEEDED(hr))
{
printf("nTask Name: %S", taskName);
SysFreeString(taskName);
hr = pRegisteredTask->get_State(&taskState);
if (SUCCEEDED(hr))
printf("ntState: %d", taskState);
else
printf("ntCannot get the registered task state: %x", hr);
}
else
{
printf("nCannot get the registered task name: %x", hr);
}
ITaskDefinition* taskDef = NULL;
hr = pRegisteredTask->get_Definition(&taskDef);
if (SUCCEEDED(hr))
{
ITriggerCollection* triggers = NULL;
taskDef->get_Triggers(&triggers);
LONG trigCnt = 0;
triggers->get_Count(&trigCnt);
for (LONG i = 0; i < trigCnt; i++)
{
ITrigger* trig = NULL;
TASK_TRIGGER_TYPE2 pType = TASK_TRIGGER_EVENT;
triggers->get_Item(_variant_t(i + 1), &trig);
trig->get_Type(&pType);
DWORD errCode = GetLastError();
if(pType != NULL)
printf("nTrigger Type : %d", pType);
}
}
else
{
printf("nCannot get the registered task definition: %x", hr);
}
pRegisteredTask->Release();
}
else
{
printf("nCannot get the registered task item at index=%d: %x", i + 1, hr);
}
}
请参阅"显示任务名称和状态 (C++(">
查看文档,看起来在你有一个IRegisteredTask之后,你需要调用get_Definition((来获取它的ITaskDefinition。
使用 ITaskDefinition,您可以通过 get_Triggers(( 获取 ITriggerCollection
然后,枚举 ITriggerCollection,您可以 QueryInterface(( 每个 ITrigger 查看它是否支持 ILogonTrigger 或 IBootTrigger 接口。
相关文章:
- valgrind-hellgrind与泄漏检查的结果不同
- C++模板来检查友元函数的存在
- 检查输入是否不是整数或数字
- 试图让变量检查数组中的某些内容
- 检查值是否在集合p1和p2中,但不在p3中
- C++概念:如何使用'concept'检查模板化结构的属性?
- 概念TS检查忽略私有访问修饰符
- 检查 std::shared_ptr<> 的当前底层类型是否为 T
- 在c++中检查长方体是否尽可能快地重叠(无迭代)
- 如何在C++中检查2D数组中负值的输入验证
- C++:正在检查LinkedList中的回文-递归方法-错误
- 使用for循环检查数组中的重复项
- 如何检查一个c++字符串中有多少相同的字符/数字
- 检查不带转换的扫描格式
- 如何检查线程是否锁定
- 清除前检查矢量
- 检查任务栏中的当前应用程序吗?(C ,Windows API)
- 如何检查io_service中的任务是否已完成
- 如何使用 c++ 在任务计划程序中检查任务的触发器
- 检查文件任务前 C/CPP 窗口