///////////////////////////////////////////////////////////////// // Call IUnknown::QueryInterface to get a pointer to // IPersistFile and IPersistFile::Save to save // the new task to disk. /////////////////////////////////////////////////////////////////
BOOL CTaskSch::Save() { // TODO: Add your dispatch handler code here
HRESULT hr = ERROR_SUCCESS;
/////////////////////////////////////////////////////////////////// // Call CoInitialize to initialize the COM library and then // CoCreateInstance to get the Task Scheduler object. /////////////////////////////////////////////////////////////////// ITaskScheduler *pITS;
/////////////////////////////////////////////////////////////////// // Call ITaskScheduler::Activate to get the Task object. ///////////////////////////////////////////////////////////////////
ITask *pITask; unsigned short* lpcwszTaskName; // unsigned short * pName= new unsigned short[m_strName.GetLength()+2]; // memset(pName,0,sizeof(unsigned short) * (m_strName.GetLength()+2)); //CString2LPCWSTR(pName,m_strName);
//set task trigger ITaskTrigger *pITaskTrigger; WORD piNewTrigger; hr = pITask->CreateTrigger(&piNewTrigger, &pITaskTrigger); if (FAILED(hr)) { CoUninitialize(); return FALSE; }
////////////////////////////////////////////////////// // Define TASK_TRIGGER structure. Note that wBeginDay, // wBeginMonth, and wBeginYear must be set to a valid // day, month, and year respectively. //////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////// // Call IPersistFile::Save to save the modified task to disk. /////////////////////////////////////////////////////////////////// IPersistFile *pIPersistFile;
有一个com组件的,ITaskScheduler
至于怎么用你在MSDN里查一下吧,n年前做过了,代码一时找不到了。
BOOL CTaskSch::CreateTask(LPCTSTR name)
{
// TODO: Add your dispatch handler code here
HRESULT hr = ERROR_SUCCESS;
ITaskScheduler *pITS;
m_strName = name;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_CTaskScheduler,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITaskScheduler,
(void **) &pITS);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
}
else
{
return FALSE;
}
/////////////////////////////////////////////////////////////////
// Call ITaskScheduler::NewWorkItem to create new task.
/////////////////////////////////////////////////////////////////
unsigned short* pwszTaskName;
ITask *pITask;
IPersistFile *pIPersistFile;
//pwszTaskName = L"Test Task";
// unsigned short * pName= new unsigned short[m_strName.GetLength()+2];
// CString2LPCWSTR(pName,m_strName);
// pwszTaskName = pName;
AnsiToUnicode(m_strName, &pwszTaskName);
hr = pITS->NewWorkItem(pwszTaskName, // Name of task
CLSID_CTask, // Class identifier
IID_ITask, // Interface identifier
(IUnknown**)&pITask); // Address of task interface
CoTaskMemFree(pwszTaskName);
// delete pName;
pITS->Release(); // Release object
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
/////////////////////////////////////////////////////////////////
// Call IUnknown::QueryInterface to get a pointer to
// IPersistFile and IPersistFile::Save to save
// the new task to disk.
/////////////////////////////////////////////////////////////////
hr = pITask->QueryInterface(IID_IPersistFile,
(void **)&pIPersistFile);
pITask->Release();
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
hr = pIPersistFile->Save(NULL,
TRUE);
pIPersistFile->Release();
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
/////////////////////////////////////////////////////////////////
// Release all resources.
/////////////////////////////////////////////////////////////////
return TRUE;
}
BOOL CTaskSch::Delete(LPCTSTR strName)
{
// TODO: Add your dispatch handler code here
HRESULT hr = ERROR_SUCCESS;
ITaskScheduler *pITS;
//m_strName = strName;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_CTaskScheduler,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITaskScheduler,
(void **) &pITS);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
unsigned short * pName;
AnsiToUnicode(strName, &pName);
hr=pITS->Delete(pName);
CoTaskMemFree(pName); pITS->Release();
if(FAILED(hr))
{
CoUninitialize();
return FALSE;
}
else
{
CoUninitialize();
return TRUE;
}
}
else
return FALSE;
}
{
// TODO: Add your dispatch handler code here
HRESULT hr = ERROR_SUCCESS;
///////////////////////////////////////////////////////////////////
// Call CoInitialize to initialize the COM library and then
// CoCreateInstance to get the Task Scheduler object.
///////////////////////////////////////////////////////////////////
ITaskScheduler *pITS;
hr = CoInitialize(NULL);
if (SUCCEEDED(hr))
{
hr = CoCreateInstance(CLSID_CTaskScheduler,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITaskScheduler,
(void **) &pITS);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
}
else
{
return FALSE;
}
///////////////////////////////////////////////////////////////////
// Call ITaskScheduler::Activate to get the Task object.
///////////////////////////////////////////////////////////////////
ITask *pITask;
unsigned short* lpcwszTaskName;
// unsigned short * pName= new unsigned short[m_strName.GetLength()+2];
// memset(pName,0,sizeof(unsigned short) * (m_strName.GetLength()+2));
//CString2LPCWSTR(pName,m_strName);
AnsiToUnicode(m_strName, &lpcwszTaskName);
// lpcwszTaskName = pName;
hr = pITS->Activate(lpcwszTaskName,
IID_ITask,
(IUnknown**) &pITask);
// delete[] pName;//lpcwszTaskName;
CoTaskMemFree(lpcwszTaskName);
// Release the ITaskScheduler interface.
pITS->Release();
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
//Set Comment
unsigned short* pwszComment;// = m_strApplication.GetBuffer(40);
AnsiToUnicode(m_strComment, &pwszComment);
hr = pITask->SetComment(pwszComment);
CoTaskMemFree(pwszComment);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
//set application name
unsigned short* pwszApplicationName;// = m_strApplication.GetBuffer(40);
// unsigned short * pApplicationName= new unsigned short[m_strApplication.GetLength()+2];
// CString2LPCWSTR(pApplicationName,m_strApplication);
// pwszApplicationName = pApplicationName;
AnsiToUnicode(m_strApplication, &pwszApplicationName);
hr = pITask->SetApplicationName(pwszApplicationName);
// delete[] pApplicationName;
CoTaskMemFree(pwszApplicationName);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
//set working directory
unsigned short* pwszWorkingDirectory ;//= m_strStartingDir.GetBuffer(40);
// unsigned short * pDir= new unsigned short[m_strStartingDir.GetLength()+2];
// CString2LPCWSTR(pDir,m_strStartingDir);
// pwszWorkingDirectory = pDir;
AnsiToUnicode(m_strStartingDir, &pwszWorkingDirectory);
hr = pITask->SetWorkingDirectory(pwszWorkingDirectory);
// delete[] pDir;
CoTaskMemFree(pwszWorkingDirectory);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
//set parameters
unsigned short* pwszParameters ;//= L"";
AnsiToUnicode(m_strParameters, &pwszParameters);
hr = pITask->SetParameters(pwszParameters);
CoTaskMemFree(pwszParameters);
if (FAILED(hr))
{
wprintf(L"Failed calling ITask::SetParameters: ");
wprintf(L"error = 0x%x\n",hr);
CoUninitialize();
return 1;
}
//set prioprity
/*DWORD dwPriority = HIGH_PRIORITY_CLASS;
hr = pITask->SetPriority(dwPriority);
if (FAILED(hr))
{
wprintf(L"Failed calling ITask::SetPriority: ");
wprintf(L"error = 0x%x\n",hr);
CoUninitialize();
return 1;
}*/
//set account and password
unsigned short* pwszAccountName;
unsigned short* pwszPassword;
AnsiToUnicode(m_strUserName, &pwszAccountName);
AnsiToUnicode(m_strPassword, &pwszPassword);
hr = pITask->SetAccountInformation(pwszAccountName,
pwszPassword);
CoTaskMemFree(pwszAccountName);
CoTaskMemFree(pwszPassword);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
//set task trigger
ITaskTrigger *pITaskTrigger;
WORD piNewTrigger;
hr = pITask->CreateTrigger(&piNewTrigger,
&pITaskTrigger);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
//////////////////////////////////////////////////////
// Define TASK_TRIGGER structure. Note that wBeginDay,
// wBeginMonth, and wBeginYear must be set to a valid
// day, month, and year respectively.
//////////////////////////////////////////////////////
TASK_TRIGGER pTrigger;
ZeroMemory(&pTrigger, sizeof (TASK_TRIGGER));
// Add code to set trigger structure?
pTrigger.wBeginDay =m_nDay%31; // Required
pTrigger.wBeginMonth =m_nMonth%12; // Required
pTrigger.wBeginYear =m_nYear; // Required
pTrigger.cbTriggerSize = sizeof (TASK_TRIGGER);
pTrigger.wStartHour = m_nHour%24;
pTrigger.wStartMinute = m_nMinute%60;
pTrigger.TriggerType = TASK_TIME_TRIGGER_DAILY;
pTrigger.Type.Daily.DaysInterval = 1;
hr = pITaskTrigger->SetTrigger (&pTrigger);
if (FAILED(hr))
{
CoUninitialize();
return FALSE;
}
pITaskTrigger->Release();
///////////////////////////////////////////////////////////////////
// Call IPersistFile::Save to save the modified task to disk.
///////////////////////////////////////////////////////////////////
IPersistFile *pIPersistFile;
hr = pITask->QueryInterface(IID_IPersistFile,
(void **)&pIPersistFile);
// Release the ITask interface.
pITask->Release();
hr = pIPersistFile->Save(NULL,
TRUE);
// Release the IPersistFile interface.
pIPersistFile->Release();
CoUninitialize();
return TRUE;
}