Enumerate Tasks

最近任务需要,搞了个枚举任务计划的小工具,特此记录一下。

网上资料很少,最后还是在MSDN中找到了自己想要的,看来以后得多翻翻MSDN才行啊。。。



#include "stdafx.h"
#include <initguid.h>
#include <ole2.h>
#include <mstask.h>
#include <msterr.h>
#include <iostream>


using namespace std;


#define TASKS_TO_RETRIEVE          5

int _tmain(int argc, _TCHAR* argv[])
{
    HRESULT hr = S_OK;
    ITaskScheduler *pITS;

    std::wcout.imbue(std::locale("chs"));

    // 初始化com接口
    hr = CoInitialize(NULL);
    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(CLSID_CTaskScheduler,
            NULL,
            CLSCTX_INPROC_SERVER,
            IID_ITaskScheduler,
            (void **) &pITS);
        if (FAILED(hr))
        {
            wcout << L"CoCreateInstance Error!" << endl;
            CoUninitialize();
            return hr;
        }
    }
    else
    {
        wcout << L"CoInitialize Error!" << endl;
        return hr;
    }

    // 开始枚举
    IEnumWorkItems *pIEnum;
    hr = pITS->Enum(&pIEnum);
    if (FAILED(hr))
    {
        wcout << L"Enum Error!" << endl;
        CoUninitialize();
        return hr;
    }

    // 取出枚举后得到的数据
    LPWSTR *lpwszNames;
    DWORD dwFetchedTasks = 0;
    while (SUCCEEDED( pIEnum->Next(TASKS_TO_RETRIEVE, &lpwszNames, &dwFetchedTasks)) && (dwFetchedTasks != 0) )
    {
        while (dwFetchedTasks)
        {
            ITask *pITask;
            wchar_t strTemp[MAX_PATH] = {0};
            SIZE_T len;

            len = wcslen(lpwszNames[--dwFetchedTasks]);
            while (len)
            {
                if (lpwszNames[dwFetchedTasks][--len] == L'.')
                {
                    wcsncpy(strTemp, lpwszNames[dwFetchedTasks], len);
                    break;
                }
            }
            
            hr = pITS->Activate(strTemp, IID_ITask, (IUnknown**) &pITask);
            if (FAILED(hr))
            {
                wcout << lpwszNames[dwFetchedTasks] << L" calling ITaskScheduler::Activate Error!" <<endl;
                continue;
            }
            
            LPWSTR lpwszApplicationName;
            hr = pITask->GetApplicationName(&lpwszApplicationName);
            if (FAILED(hr))
            {
                wcout << lpwszNames[dwFetchedTasks] << L" calling ITask::GetApplicationName Error!" <<endl;
                continue;
            }
            
            wcout << lpwszNames[dwFetchedTasks] << endl << lpwszApplicationName << endl << endl;
            pITask->Release();
            CoTaskMemFree(lpwszApplicationName);
            CoTaskMemFree(lpwszNames[dwFetchedTasks]);
        }

        CoTaskMemFree(lpwszNames);
    }

    pITS->Release();
    pIEnum->Release();
    CoUninitialize();

    system("pause");

    return 0;
}

当然,还有一种比较简单的方法是自己解析job文件,具体做法也比较简单,就不贴代码了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值