Task Scheduler 1.0的相关操作

了解ITaskScheduler对象

想看官方的在线连接,[点我吧]

在Task Scheduler 1.0之中,提供了这么一个COM对象来让开发者操作任务计划项。一般而言,我们可以直接通过此对象调用相应的接口来删除、创建、修改、遍历某些任务计划项等等。但是要注意,Task Scheduler 1.0在Vista及其以上系统中仅仅可以操作其中的一部分,正如之前所罗列的,仅当这些任务计划项的配置为Xp等低版本的Windows系统的时候才可以完全由其操作,如图所示。因此,要想操作Vista及其以上系统里的所有任务计划项,那么请使用Task Schduler 2.0。

操作Task Scheduler 1.0的常见套路

对于TaskScheduler 1.0而言,开发包括了以下常见步骤,如下所示:

  • 1.调用CoInitialize()来初始化COM,代码片段如下所示:

CoInitialize(NULL);
  • 2.调用CoInitializeSecurity()来设置进程安全,避免被杀毒软件报毒

代码片段如下所示:

CoInitializeSecurity(
  NULL,
  -1,
  NULL,
  NULL,
  RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
  RPC_C_IMP_LEVEL_IMPERSONATE,
  NULL,
  0,
  NULL
  );
  • 3.使用CoCreateInstance()函数来初始化一个ITaskScheduler对象。代码片段如下所示:

ITaskScheduler *m_pITS=NULL;
CoCreateInstance(CLSID_CTaskScheduler,
        NULL,
        CLSCTX_INPROC_SERVER,
        IID_ITaskScheduler,
        (void ** )&m_pITS);
  • 4.调用ITaskScheduler对象里面提供的各种操作方法,来执行相应的操作。如下图所示:
    Task Scheduler1.0的常用操作
    MSDN提供的Task Scheduler1.0的操作例子
    注意,假设修改了某个任务计划项的名称或者某些标记,那么需要使用 IPersistFile对象来将更改后的任务计划项的信息应用到Windows系统之中,否则,将会失效。
IPersistFile *pIPersistFile;
m_hResult = pITask->QueryInterface(IID_IPersistFile, (void ** )&pIPersistFile);
if (SUCCEEDED(m_hResult))
{
  m_hResult = pIPersistFile->Save(NULL,
    TRUE);
  if (FAILED(m_hResult))
  {
    _tprintf(_T("Failed calling IPersistFile::Save: "));
    //FOUTDEG(_T("error = 0x%x\n"), m_hResult);
    bResult = false;
  }
}
pIPersistFile->Release();
  • 5.操作完成之后,调用CoUninitialize()来释放COM。当然在此之前,需要对各个COM对象,比如ITaskSchedulerIPersistFile等COM对象执行Release()函数进行内存释放

注意事项:第一,COM对象纵使不执行Release(),也是不会被Vld等内存泄漏检测库检测到内存泄漏的,因为这些对象本身就是驻留在操作系统上的,所以为了处理由于忘记释放这个COM对象引起的诸多问题,建议养成一种习惯,在各个COM对象的后面添加上XXX->Release();语句,当然,你也可以使用智能指针来管理这么一个过程。第二,重申一点关于修改某个任务计划项的问题,必须使用IPersistFile对象来将更改应用到操作系统上。比方说,在Xp系统下,我们可以明确看到,其任务计划管理器上会有一个“应用”按钮,实质就是通过IPersistFile对象来将当前对任务计划项的修改应用到操作系统之上。第三,MSDN上面已经提供了一些常用的Task Scheduler 1.0的各种操作方法了,建议直接阅读这些样例工程来学习Task Scheduler 1.0的开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值