如何在任务计划程序中显示所有任务
How to display all the tasks in Task scheduler
我想使用 COM 库显示任务计划程序下的所有任务。
我尝试使用 learn.microsoft.com 上使用COM对象的程序。但它不是显示所有 60 个任务,而是只显示 12 个任务
//Get the pointer to the root task folder.
ITaskFolder *pRootFolder = NULL;
hr = pService->GetFolder(_bstr_t(L"\"), &pRootFolder);
pService->Release();
if (FAILED(hr))
{
printf("Cannot get Root Folder pointer: %x", hr);
CoUninitialize();
return 1;
}
// -------------------------------------------------------
// Get the registered tasks in the folder.
IRegisteredTaskCollection* pTaskCollection = NULL;
hr = pRootFolder->GetTasks(NULL, &pTaskCollection);
pRootFolder->Release();
if (FAILED(hr))
{
printf("Cannot get the registered tasks.: %x", hr);
CoUninitialize();
return 1;
}
LONG numTasks = 0;
hr = pTaskCollection->get_Count(&numTasks);
TASK_STATE taskState;
for (LONG i = 0; i < numTasks; i++)
{
IRegisteredTask* pRegisteredTask = NULL;
hr = pTaskCollection->get_Item(_variant_t(i + 1), &pRegisteredTask);
if (SUCCEEDED(hr))
{
BSTR taskName = NULL;
hr = pRegisteredTask->get_Name(&taskName);
if (SUCCEEDED(hr))
{
printf("nTask Name: %S", taskName);
SysFreeString(taskName);
hr = pRegisteredTask->get_State(&taskState);
if (SUCCEEDED(hr))
printf("ntState: %d", taskState);
我希望输出显示所有任务,但它只显示选定数量的任务。
https://learn.microsoft.com/en-us/windows/desktop/taskschd/displaying-task-names-and-state--c---
这是我用于该程序的链接
这是一个示例控制台应用程序代码,它将递归显示所有任务,但正如我在评论中所说,输出将取决于您是否以管理员身份运行它。
// include task scheduler lib from code
#pragma comment(lib, "taskschd.lib")
// some useful macros
#define WIDEN2(x) L ## x
#define WIDEN(x) WIDEN2(x)
#define __WFILE__ WIDEN(__FILE__)
#define HRCHECK(__expr) {hr=(__expr);if(FAILED(hr)){wprintf(L"FAILURE 0x%08X (%i)ntline: %u file: '%s'ntexpr: '" WIDEN(#__expr) L"'n",hr, hr, __LINE__,__WFILE__);goto cleanup;}}
#define RELEASE(__p) {if(__p!=nullptr){__p->Release();__p=nullptr;}}
#define STARTUP HRESULT hr=S_OK;
#define CLEANUP {cleanup:return hr;}
// forward declaration
HRESULT DumpFolder(ITaskFolder *fld);
int main()
{
STARTUP;
CoInitialize(NULL);
{
CComPtr<ITaskService> svc;
CComPtr<ITaskFolder> fld;
HRCHECK(svc.CoCreateInstance(CLSID_TaskScheduler));
HRCHECK(svc->Connect(CComVariant(), CComVariant(), CComVariant(), CComVariant()));
HRCHECK(svc->GetFolder(CComBSTR(L"\"), &fld));
HRCHECK(DumpFolder(fld));
}
CoUninitialize();
CLEANUP;
}
HRESULT DumpFolder(ITaskFolder *fld)
{
STARTUP;
CComPtr<IRegisteredTaskCollection> tasks;
CComPtr<ITaskFolderCollection> children;
LONG count;
HRCHECK(fld->GetTasks(TASK_ENUM_HIDDEN, &tasks));
HRCHECK(tasks->get_Count(&count));
// dump out tasks
for (LONG i = 1; i < (count + 1); i++)
{
CComPtr<IRegisteredTask> task;
CComBSTR name;
HRCHECK(tasks->get_Item(CComVariant(i), &task));
HRCHECK(task->get_Name(&name));
wprintf(L"name:'%s'n", name.m_str);
}
// dump out sub folder
HRCHECK(fld->GetFolders(0, &children));
HRCHECK(children->get_Count(&count));
for (LONG i = 1; i < (count + 1); i++)
{
CComPtr<ITaskFolder> child;
HRCHECK(children->get_Item(CComVariant(i), &child));
// go recursive
HRCHECK(DumpFolder(child));
}
CLEANUP;
}
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 无法删除EXE崩溃后,即使进程未显示在任务管理器中
- WinDBG适用于从Visual Studio 2015保存的转储,但不适用于任务管理器。显示异常代码"not found"
- 如何使用任务栏按钮显示进度条?
- 如何使用QSplashScreen时显示任务栏图标
- 隐藏自定义应用程序窗口,但应在任务栏上显示应用程序图标(不是作为托盘图标)
- 如何在任务计划程序中显示所有任务
- 当我打开一个新对话框时,如何禁止在Qt编程的Windows任务栏中显示对话框
- 任务管理器显示的线程比我创建的线程多
- 对于多线程应用程序中的显示任务,原子锁或互斥锁是必须的吗
- 如何使用 FMX C++在任务栏上显示辅助窗体
- 从任务管理器获取应用程序故障转储中显示的状态在 Windows 上是否准确
- 具有两个窗口的C++中的应用程序.任务栏中显示的一个窗口.另一个未显示
- C++任务栏中不显示使用 CreateWindow 创建的窗口
- Win32:是否可以显示窗口,但在任务栏中隐藏它
- 尝试使用while循环取消分配向量,任务管理器显示内存使用正在增加
- 使QT窗体不显示在任务栏
- 在任务切换器中显示子窗口
- 如何制作全屏但仍显示任务栏的窗口