如何添加计划任务?急急!!

解决方案 »

  1.   

    你是在程序里做?
    有一个com组件的,ITaskScheduler
    至于怎么用你在MSDN里查一下吧,n年前做过了,代码一时找不到了。
      

  2.   

    http://www.microsoft.com/china/technet/prodtechnol/windows2000serv/downloads/taskschd.asp
      

  3.   

    看了以前的代码,是要设置用户名和密码
    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;


    }
      

  4.   

    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;

    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;
    }