リンク元(http://junktxt.blog90.fc2.com/blog-entry-8.html)
//-----------------------------------------------------------------------------
// タスク登録サンプル1(task1.cpp)
//
// 2007/01/26 … VC2005用サンプル
//-----------------------------------------------------------------------------
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <tchar.h>
#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS
#include <atlbase.h>
#include <atlconv.h> // T2W
#include <atltime.h> // CTime, CTimeSpan
#include <mstask.h>
#pragma comment(lib, "MSTASK.LIB")
// TODO: タスクを実行するアカウントとパスワードを指定
#define TASK_USER _T("")
#define TASK_PASS _T("")
// 登録タスクの定義
#define TASK_NAME _T("NotePad")
#define TASK_PATH _T("C:\\WINDOWS\\NOTEPAD.EXE")
BOOL CreateTask(ITaskScheduler* &pITS,
TCHAR* szName, TCHAR* szAppPath, CTime& t);
//-----------------------------------------------------------------------------
// エントリーポイント
//-----------------------------------------------------------------------------
int APIENTRY _tWinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
ITaskScheduler *pITS;
HRESULT hr;
// COM初期化
hr = ::CoInitialize(NULL);
ATLASSERT(SUCCEEDED(hr));
// インスタンス作成
hr = CoCreateInstance(
CLSID_CTaskScheduler,
NULL,
CLSCTX_INPROC_SERVER,
IID_ITaskScheduler,
(void **) &pITS );
ATLASSERT(SUCCEEDED(hr));
// タスクを実行する時刻を決定(約1分後)
CTime t = CTime::GetCurrentTime();
t += CTimeSpan(0,0,0,90);
// タスクの登録処理
CreateTask(pITS, TASK_NAME, TASK_PATH, t);
pITS->Release();
::CoUninitialize();
return 0;
}
//-----------------------------------------------------------------------------
// タスクの登録
//-----------------------------------------------------------------------------
BOOL CreateTask(
ITaskScheduler* &pITS, // ITaskSchedulerインタフェース
TCHAR* szName, // タスク名
TCHAR* szAppPath, // パス
CTime& t) // 開始する時刻
{
USES_CONVERSION; // 文字変換マクロを使用
CComPtr<ITask> pITask;
HRESULT hr;
// 新しいタスクを作成
hr = pITS->NewWorkItem(T2W(szName), CLSID_CTask,
IID_ITask, (IUnknown**)&pITask);
if( FAILED(hr) ) return FALSE;
// 実行アプリケーションののパスを設定
hr = pITask->SetApplicationName( T2W(szAppPath) );
if( FAILED(hr) ) return FALSE;
// 実行アカウント情報を設定
hr = pITask->SetAccountInformation(T2W(TASK_USER), T2W(TASK_PASS));
if( FAILED(hr) ) return FALSE;
// フラグ設定(設定したアプリが終了した時に、タスクを削除)
pITask->SetFlags(TASK_FLAG_DELETE_WHEN_DONE);
// 開始時刻を指定(1回のみ実行)
TASK_TRIGGER Trigger = { sizeof(TASK_TRIGGER) };
Trigger.wBeginDay = static_cast( t.GetDay() );
Trigger.wBeginMonth = static_cast( t.GetMonth() );
Trigger.wBeginYear = static_cast( t.GetYear() );
Trigger.wStartHour = static_cast( t.GetHour() );
Trigger.wStartMinute = static_cast( t.GetMinute());
Trigger.TriggerType = TASK_TIME_TRIGGER_ONCE;
// トリガーを作成
CComPtr<ITaskTrigger> pITaskTrigger;
WORD piNewTrigger;
hr = pITask->CreateTrigger(&piNewTrigger, &pITaskTrigger);
if( FAILED(hr) ) return FALSE;
// 起動条件の設定
hr = pITaskTrigger->SetTrigger(&Trigger);
if( FAILED(hr) ) return FALSE;
// IPersistFileインタフェースを取得
CComPtr<IPersistFile> pIPersistFile;
hr = pITask->QueryInterface(IID_IPersistFile, (void **)&pIPersistFile);
if( FAILED(hr) ) return FALSE;
// タスク保存
hr = pIPersistFile->Save(NULL, TRUE);
if( FAILED(hr) ) return FALSE;
return TRUE;
}