Enumerate Tasks

来源:互联网 发布:php站群管理系统 编辑:程序博客网 时间:2024/05/22 10:40

原文地址:http://blog.csdn.net/hu3167343/article/details/8592290


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

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



[cpp] view plain copy
  1. #include "stdafx.h"  
  2. #include <initguid.h>  
  3. #include <ole2.h>  
  4. #include <mstask.h>  
  5. #include <msterr.h>  
  6. #include <iostream>  
  7.   
  8.   
  9. using namespace std;  
  10.   
  11.   
  12. #define TASKS_TO_RETRIEVE          5  
  13.   
  14. int _tmain(int argc, _TCHAR* argv[])  
  15. {  
  16.     HRESULT hr = S_OK;  
  17.     ITaskScheduler *pITS;  
  18.   
  19.     std::wcout.imbue(std::locale("chs"));  
  20.   
  21.     // 初始化com接口  
  22.     hr = CoInitialize(NULL);  
  23.     if (SUCCEEDED(hr))  
  24.     {  
  25.         hr = CoCreateInstance(CLSID_CTaskScheduler,  
  26.             NULL,  
  27.             CLSCTX_INPROC_SERVER,  
  28.             IID_ITaskScheduler,  
  29.             (void **) &pITS);  
  30.         if (FAILED(hr))  
  31.         {  
  32.             wcout << L"CoCreateInstance Error!" << endl;  
  33.             CoUninitialize();  
  34.             return hr;  
  35.         }  
  36.     }  
  37.     else  
  38.     {  
  39.         wcout << L"CoInitialize Error!" << endl;  
  40.         return hr;  
  41.     }  
  42.   
  43.     // 开始枚举  
  44.     IEnumWorkItems *pIEnum;  
  45.     hr = pITS->Enum(&pIEnum);  
  46.     if (FAILED(hr))  
  47.     {  
  48.         wcout << L"Enum Error!" << endl;  
  49.         CoUninitialize();  
  50.         return hr;  
  51.     }  
  52.   
  53.     // 取出枚举后得到的数据  
  54.     LPWSTR *lpwszNames;  
  55.     DWORD dwFetchedTasks = 0;  
  56.     while (SUCCEEDED( pIEnum->Next(TASKS_TO_RETRIEVE, &lpwszNames, &dwFetchedTasks)) && (dwFetchedTasks != 0) )  
  57.     {  
  58.         while (dwFetchedTasks)  
  59.         {  
  60.             ITask *pITask;  
  61.             wchar_t strTemp[MAX_PATH] = {0};  
  62.             SIZE_T len;  
  63.   
  64.             len = wcslen(lpwszNames[--dwFetchedTasks]);  
  65.             while (len)  
  66.             {  
  67.                 if (lpwszNames[dwFetchedTasks][--len] == L'.')  
  68.                 {  
  69.                     wcsncpy(strTemp, lpwszNames[dwFetchedTasks], len);  
  70.                     break;  
  71.                 }  
  72.             }  
  73.               
  74.             hr = pITS->Activate(strTemp, IID_ITask, (IUnknown**) &pITask);  
  75.             if (FAILED(hr))  
  76.             {  
  77.                 wcout << lpwszNames[dwFetchedTasks] << L" calling ITaskScheduler::Activate Error!" <<endl;  
  78.                 continue;  
  79.             }  
  80.               
  81.             LPWSTR lpwszApplicationName;  
  82.             hr = pITask->GetApplicationName(&lpwszApplicationName);  
  83.             if (FAILED(hr))  
  84.             {  
  85.                 wcout << lpwszNames[dwFetchedTasks] << L" calling ITask::GetApplicationName Error!" <<endl;  
  86.                 continue;  
  87.             }  
  88.               
  89.             wcout << lpwszNames[dwFetchedTasks] << endl << lpwszApplicationName << endl << endl;  
  90.             pITask->Release();  
  91.             CoTaskMemFree(lpwszApplicationName);  
  92.             CoTaskMemFree(lpwszNames[dwFetchedTasks]);  
  93.         }  
  94.   
  95.         CoTaskMemFree(lpwszNames);  
  96.     }  
  97.   
  98.     pITS->Release();  
  99.     pIEnum->Release();  
  100.     CoUninitialize();  
  101.   
  102.     system("pause");  
  103.   
  104.     return 0;  
  105. }  

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


0 0