原文地址:http://blog.youkuaiyun.com/hu3167343/article/details/8592290
版权声明:本文为博主原创文章,未经博主允许不得转载。
最近任务需要,搞了个枚举任务计划的小工具,特此记录一下。
网上资料很少,最后还是在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文件,具体做法也比较简单,就不贴代码了。