在xp下设置控制面板中的任务与计划示例

 #include <comdef.h>
//  Include the task header file.
#include <taskschd.h>
# pragma comment(lib, "taskschd.lib")
# pragma comment(lib, "comsupp.lib")
#include <mstask.h>
# pragma comment(lib, "mstask.lib")
#include <windows.h>

BOOL  CreateTask1(
   WCHAR *in_wszTaskName,//任务名称
   WCHAR *in_wszTargetName,//完整的名称
   WCHAR *in_wszStartPath,//开始位置
   WCHAR *in_wszComment,//备注信息
   WCHAR *in_wszAccountName,//用户名
   WCHAR *in_wszPwd,//用户密码
   SYSTEMTIME *in_pStartTime,//任务开始时间
   SYSTEMTIME *in_pEndTime,//任务结束时间
   DWORD in_dwStartType)//任务类型
{
 BOOL bResult = FALSE;
 HRESULT hr = S_OK;
 ITaskScheduler *pITS;
 SYSTEMTIME time;
 GetLocalTime(&time);

 if(!in_wszTaskName||  !in_wszTargetName)//均不能为空
 {
  return bResult;
 }

 hr = CoCreateInstance(CLSID_CTaskScheduler,
                          NULL,
                          CLSCTX_INPROC_SERVER,
                          IID_ITaskScheduler,
                          (void **) &pITS);
 if (FAILED(hr))
 {
  printf("Failed calling CoCreateInstance, error = 0x%x/n",hr);
 }
 else
 {
  ITask *pITask;
  pITS->Delete(in_wszTaskName);
  hr = pITS->NewWorkItem(in_wszTaskName,         // Name of task
                         CLSID_CTask,          // Class identifier
                         IID_ITask,            // Interface identifier
                         (IUnknown**)&pITask); // Address of task
  if (FAILED(hr))
  {
   printf("Failed calling NewWorkItem, error = 0x%x/n",hr);
  }
  else
  {
   IPersistFile *pIPersistFile;
   hr = pITask->QueryInterface(IID_IPersistFile,(void **)&pIPersistFile);
   if (FAILED(hr))
   {
    printf("Failed calling QueryInterface, error = 0x%x/n",hr);
   }
   else
   {
    hr = pITask->SetApplicationName(in_wszTargetName);//设置新任务的名称
    if (FAILED(hr))
    {
     printf("Failed calling SetApplicationName, error = 0x%x/n",hr);
    }
    pITask->SetWorkingDirectory(in_wszStartPath);
     if(in_wszComment)//设置备注信息
     {
      hr = pITask->SetComment(in_wszComment);
      if (FAILED(hr))
      {
       printf("Failed calling SetComment, error = 0x%x/n",hr);
      }
     }

     if(in_wszAccountName)//设置用户名和密码
     {
      hr = pITask->SetAccountInformation(L"",NULL);
      if (FAILED(hr))
      {
       printf("Failed calling SetAccountInformation, error = 0x%x/n",hr);
      }
     }

     DWORD dwFlag;
     hr = pITask->GetFlags(&dwFlag);//先获得本来的flag
     if (FAILED(hr))
     {
      printf("Failed calling GetFlags, error = 0x%x/n",hr);
     }
     printf("dwFlag = 0x%x/n",dwFlag);

     dwFlag   |=   TASK_FLAG_INTERACTIVE;   //使任务可以使用
     dwFlag   |=   TASK_FLAG_DELETE_WHEN_DONE; //任务完成后删除任务
     hr = pITask->SetFlags(dwFlag);
     if (FAILED(hr))
     {
      printf("Failed calling SetFlags, error = 0x%x/n",hr);
     }


     //设置任务触发时间
     ITaskTrigger *pITaskTrigger;
     WORD piNewTrigger;
     hr = pITask->CreateTrigger(&piNewTrigger, &pITaskTrigger);
       //piNewTrigger : A pointer to the returned trigger index value of the new trigger.
       //pITaskTrigger : A pointer to a pointer to an ITaskTrigger interface.
     if (FAILED(hr))
     {
      wprintf(L"Failed calling ITask::CreatTrigger:  error = 0x%x/n",hr);
     }
     else
     {
      TASK_TRIGGER pTrigger;
      ZeroMemory(&pTrigger, sizeof (TASK_TRIGGER));

      // Add code to set trigger structure?
      pTrigger.wBeginDay = in_pStartTime->wDay;                  // Required
      pTrigger.wBeginMonth = in_pStartTime->wMonth;                // Required
      pTrigger.wBeginYear = in_pStartTime->wYear;              // Required
      pTrigger.wStartHour = in_pStartTime->wHour;
      pTrigger.wStartMinute = in_pStartTime->wMinute;
      pTrigger.cbTriggerSize = sizeof (TASK_TRIGGER);
      if(in_pEndTime)
      {
       pTrigger.wEndDay = in_pEndTime->wDay;
       pTrigger.wEndMonth = in_pEndTime->wMonth;
       pTrigger.wEndYear = in_pEndTime->wYear;
      }
      pTrigger.TriggerType = /*TASK_TIME_TRIGGER_ONCE*/(TASK_TRIGGER_TYPE)in_dwStartType;//设置触发类型
      hr = pITaskTrigger->SetTrigger(&pTrigger);
      if (FAILED(hr))
      {
       wprintf(L"Failed calling ITaskTrigger::SetTrigger: error = 0x%x/n",hr);
       //wprintf(L"ErrorCode = %d/n",GetLastError());
      }
      else
      {
       IPersistFile *pIPersistFile;
       hr = pITask->QueryInterface(IID_IPersistFile,(void **)&pIPersistFile);
       if (FAILED(hr))
       {
        wprintf(L"Failed calling QueryInterface::QueryInterface: error = 0x%x/n",hr);
       }
       else
       {
        hr = pIPersistFile->Save(NULL,TRUE);
        if (FAILED(hr))
        {
         wprintf(L"Failed calling IPersistFile::Save: error = 0x%x/n",hr);
        }
        else
        {
         wprintf(L"The trigger was created and IPersistFile::Save was called to save the new trigger to disk./n");
         bResult=TRUE;
        }
        pIPersistFile->Release();
       }
      }
      pITaskTrigger->Release();
     }
   // }
   //}
   //pIPersistFile->Release();
   }
   pITask->Release();
  }
  pITS->Release();
 }
 return bResult;
}

你可能感兴趣的:(XP,header,null,include,任务,interface)