#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;
}