リンク元(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;
}