From: Jacob Czekalla jczekalla@codeweavers.com
--- dlls/taskschd/regtask.c | 27 ++++++++++++++++++++++++--- dlls/taskschd/tests/scheduler.c | 3 --- 2 files changed, 24 insertions(+), 6 deletions(-)
diff --git a/dlls/taskschd/regtask.c b/dlls/taskschd/regtask.c index 42ed24337ca..4b53e4311c6 100644 --- a/dlls/taskschd/regtask.c +++ b/dlls/taskschd/regtask.c @@ -464,9 +464,30 @@ static HRESULT WINAPI regtasks_Invoke(IRegisteredTaskCollection *iface, DISPID d
static HRESULT WINAPI regtasks_get_Count(IRegisteredTaskCollection *iface, LONG *count) { - FIXME("%p,%p: stub\n", iface, count); - if (count) *count = 0; - return E_NOTIMPL; + HRESULT hr; + RegisteredTaskCollection *reg_tasks = NULL; + TASK_NAMES task_names = NULL; + DWORD start_index = 0, num_tasks = 0, i = 0; + + reg_tasks = impl_from_IRegisteredTaskCollection(iface); + + if (!count) + return E_POINTER; + + hr = SchRpcEnumTasks(reg_tasks->path, 0, &start_index, 0, &num_tasks, &task_names); + if (FAILED(hr)) + { + *count = 0; + return hr; + } + + *count = num_tasks; + + for (;i < num_tasks; i++) + MIDL_user_free(task_names[i]); + MIDL_user_free(task_names); + + return S_OK; }
static HRESULT WINAPI regtasks_get_Item(IRegisteredTaskCollection *iface, VARIANT index, IRegisteredTask **regtask) diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c index a267c587884..bcd3f32353d 100644 --- a/dlls/taskschd/tests/scheduler.c +++ b/dlls/taskschd/tests/scheduler.c @@ -1917,13 +1917,10 @@ static void test_get_Count_and_Item(void)
/* Test get_Count */ hr = IRegisteredTaskCollection_get_Count(tasks, NULL); - todo_wine ok(hr == E_POINTER, "expected E_POINTER, got %#lx\n", hr);
hr = IRegisteredTaskCollection_get_Count(tasks, &num_tasks); - todo_wine ok(hr == S_OK, "expected S_OK, got %#lx\n", hr); - todo_wine ok(num_tasks == 1, "expected 1 task, got %ld\n", num_tasks);
/* Test get_Item */