c++通过设置计划任务实现自启动
#include "stdafx.h"
#include "MyTaskSchedule.h"
int _tmain(int argc, _TCHAR* argv[])
{
CMyTaskSchedule task;
BOOL bRet = FALSE;
// 创建 任务计划
bRet = task.NewTask("程序名", "程序路径", "", "");
if (FALSE == bRet)
{
printf("Create Task Schedule Error!\n");
}
// 暂停
printf("Create Task Schedule OK!\n");
system("pause");
// 卸载 任务计划
bRet = task.Delete("520");
if (FALSE == bRet)
{
printf("Delete Task Schedule Error!\n");
}
printf("Delete Task Schedule OK!\n");
system("pause");
return 0;
}
void ShowError(char *lpszText, DWORD dwErrCode)
{
char szErr[MAX_PATH] = {0};
::wsprintf(szErr, "%s Error!\nError Code Is:0x%08x\n", lpszText, dwErrCode);
::MessageBox(NULL, szErr, "ERROR", MB_OK | MB_ICONERROR);
}
CMyTaskSchedule::CMyTaskSchedule(void)
{
m_lpITS = NULL;
m_lpRootFolder = NULL;
// 初始化COM
HRESULT hr = ::CoInitialize(NULL);
if(FAILED(hr))
{
ShowError("CoInitialize", hr);
}
// 创建一个任务服务(Task Service)实例
hr = ::CoCreateInstance(CLSID_TaskScheduler,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITaskService,
(LPVOID *)(&m_lpITS));
if(FAILED(hr))
{
ShowError("CoCreateInstance", hr);
}
// 连接到任务服务(Task Service)
hr = m_lpITS->Connect(_variant_t(), _variant_t(), _variant_t(), _variant_t());
if(FAILED(hr))
{
ShowError("ITaskService::Connect", hr);
}
// 获取Root Task Folder的指针,这个指针指向的是新注册的任务
hr = m_lpITS->GetFolder(_bstr_t("\\"), &m_lpRootFolder);
if(FAILED(hr))
{
ShowError("ITaskService::GetFolder", hr);
}
}
CMyTaskSchedule::~CMyTaskSchedule(void)
{
if(m_lpITS)
{
m_lpITS->Release();
}
if(m_lpRootFolder)
{
m_lpRootFolder->Release();
}
// 卸载COM
::CoUninitialize();
}