BOOL CTimeSet::CreateTask(
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;
} /*CoCreateInstance(*/
::CoInitialize(NULL);
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(in_wszAccountName,NULL);
if (FAILED(hr))
{
//printf("Failed calling SetAccountInformation, error = 0x%x\n",hr);
}
} DWORD dwFlag;
dwFlag = TASK_FLAG_INTERACTIVE; //使任务可以使用
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_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));
UpdateData(true);
// 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 = m_dtDatetime.GetHour();
//pTrigger.wStartMinute = m_dtDatetime.GetMinute();
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->GetTrigger(&pTrigger);
CTime time;
m_TimeBegin.GetTime(time);
pTrigger.wStartHour = time.GetHour();
pTrigger.wStartMinute = time.GetMinute();
//pTrigger.rgFlags = TASK_TRIGGER_FLAG_HAS_END_DATE;
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();
}
::CoUninitialize();
return bResult;
}有两个问题:
1.为什么代码创建出计划任务后,没有下次执行时间?
2.哪个属性可以让创建出来的计划任务,只有登录才运行这一项是选定的?
有明白的帮帮忙吧!!!
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;
} /*CoCreateInstance(*/
::CoInitialize(NULL);
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(in_wszAccountName,NULL);
if (FAILED(hr))
{
//printf("Failed calling SetAccountInformation, error = 0x%x\n",hr);
}
} DWORD dwFlag;
dwFlag = TASK_FLAG_INTERACTIVE; //使任务可以使用
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_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));
UpdateData(true);
// 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 = m_dtDatetime.GetHour();
//pTrigger.wStartMinute = m_dtDatetime.GetMinute();
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->GetTrigger(&pTrigger);
CTime time;
m_TimeBegin.GetTime(time);
pTrigger.wStartHour = time.GetHour();
pTrigger.wStartMinute = time.GetMinute();
//pTrigger.rgFlags = TASK_TRIGGER_FLAG_HAS_END_DATE;
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();
}
::CoUninitialize();
return bResult;
}有两个问题:
1.为什么代码创建出计划任务后,没有下次执行时间?
2.哪个属性可以让创建出来的计划任务,只有登录才运行这一项是选定的?
有明白的帮帮忙吧!!!
解决方案 »
- 一个最简化的弹出带图标LISTCTRL对话框的工程,为什么第2次以后就没有图标了.
- OLE DB 打开会话 Prepare()错误 会是什么原因?
- VS2005一按F10或者F11就进反汇编了,怎么回事啊?
- 大家可以加入(8648432 )共同讨论vc 问题 (求管理员)
- 关于窗口焦点的问题。
- ASPack 2.11 加壳的软件用什么工具脱壳?
- 如何获得当前 登录 用户的用户名
- 一道面试题????
- 如何用另外一个工程中的对话框资源创建对话框?
- ado怎么用dbgrid等,它没有datasource呀
- vc新手 请教一个画透明图片的问题
- 为何如下调用dll中的函数竟然不报函数重定义错误!!而且是什么个逻辑呢
高人们都哪去了啊!!!