c++ 작업 스케줄러 동작 추가




작업 스케줄러를 사용하면

동작 탭에 등록된 작업을 수행하게 된다.


현재 등록되어 있는 작업의 경우 

c:\windows\system32\notepad.exe를 실행하는 작업만 등록되어 있는데


한가지 작업에서 여러가지 동작을 수행할 수 있다.

* 여러개로 등록된 동작은 순차적으로 동작 함.

예) 아래 그림에 있는 동작의 순서는 NOTEPAD.EXE가 종료 되면, winver.exe가 실행이 된다. 







동작을 생성하는 방법은

이미 만들었던 IActionCollection 인터페이스에 Create()로 새로운 동작을 추가해주는 것이다.


Create로 만들 수 있는 동작의 종류는 아래와 같다.


ValueMeaning
TASK_ACTION_EXEC
0

The action performs a command-line operation. For example, the action could run a script, start an executable, or, if the name of a document is provided, find its associated application and start the application with the document.

TASK_ACTION_COM_HANDLER
5

The action fires a handler.

TASK_ACTION_SEND_EMAIL
6

This action sends an email message.

TASK_ACTION_SHOW_MESSAGE
7

This action shows a message box.



그리고 맨 처음 동작 추가와 동일한 방식으로 

동작을 추가해 준다

  

    //  Create the action, specifying that it is an executable action.

    IAction *pAction1 = NULL;

    hr = pActionCollection->Create( TASK_ACTION_EXEC, &pAction1 );

    pActionCollection->Release();

    if( FAILED(hr) )

    {

        printf("\nCannot create the action: %x", hr );

        pRootFolder->Release();

        pTask->Release();

        CoUninitialize();

        return 1;

    }


    IExecAction *pExecAction1 = NULL;

    //  QI for the executable task pointer.

    hr = pAction1->QueryInterface( 

        IID_IExecAction, (void**) &pExecAction1 );

    pAction1->Release();

    if( FAILED(hr) )

    {

        printf("\nQueryInterface call failed for IExecAction: %x", hr );

        pRootFolder->Release();

        pTask->Release();

        CoUninitialize();

        return 1;

    }


//  Get the windows directory and set the path to notepad.exe.

wstring wstrWinVerExecutablePath = _wgetenv( L"WINDIR");

    wstrWinVerExecutablePath += L"\\SYSTEM32\\winver.exe";



    //  Set the path of the executable to notepad.exe.

    hr = pExecAction1->put_Path( _bstr_t( wstrWinVerExecutablePath.c_str() ) );

    pExecAction1->Release();

    if( FAILED(hr) )

    {

        printf("\nCannot set path of executable: %x", hr );

        pRootFolder->Release();

        pTask->Release();

        CoUninitialize();

        return 1;

    }