Implements IRegisteredTaskCollection get_Count()
From: Jacob Czekalla jczekalla@codeweavers.com
--- dlls/taskschd/tests/scheduler.c | 53 +++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+)
diff --git a/dlls/taskschd/tests/scheduler.c b/dlls/taskschd/tests/scheduler.c index f9c209f1d84..faedbde06bc 100644 --- a/dlls/taskschd/tests/scheduler.c +++ b/dlls/taskschd/tests/scheduler.c @@ -1879,6 +1879,58 @@ static void test_TaskDefinition(void) ITaskService_Release(service); }
+static void test_get_Count(void) +{ + HRESULT hr; + LONG num_tasks; + VARIANT v_null; + ITaskService *service; + ITaskFolder *folder, *root; + ITaskDefinition *task_def; + IRegistrationInfo *reg_info; + IActionCollection *actions; + IAction *action; + IExecAction *exec_action; + IRegisteredTask *task1; + IRegisteredTaskCollection *tasks; + + V_VT(&v_null) = VT_NULL; + + CoCreateInstance(&CLSID_TaskScheduler, NULL, CLSCTX_INPROC_SERVER, &IID_ITaskService, (void**)&service); + ITaskService_Connect(service, v_null, v_null, v_null, v_null); + + ITaskService_GetFolder(service, (BSTR)L"\", &root); + ITaskFolder_CreateFolder(root,(BSTR)L"\Wine", v_null, &folder); + + ITaskService_NewTask(service, 0, &task_def); + ITaskDefinition_get_RegistrationInfo(task_def, ®_info); + IRegistrationInfo_put_Author(reg_info, (BSTR)L"Wine Test"); + + ITaskDefinition_get_Actions(task_def, &actions); + IActionCollection_Create(actions, TASK_ACTION_EXEC, &action); + IAction_QueryInterface(action, &IID_IExecAction, (void**)&exec_action); + IExecAction_put_Path(exec_action, (BSTR)L"task1.exe"); + + ITaskFolder_RegisterTaskDefinition(folder, (BSTR)L"Task1", task_def, TASK_CREATE, v_null, v_null, TASK_LOGON_NONE, v_null, &task1); + ITaskFolder_GetTasks(folder, TASK_ENUM_HIDDEN, &tasks); + + hr = IRegisteredTaskCollection_get_Count(tasks, NULL); + ok(hr == E_POINTER, "expected E_POINTER, got %#lx\n", hr); + + hr = IRegisteredTaskCollection_get_Count(tasks, &num_tasks); + ok(hr == S_OK, "expected S_OK, got %#lx\n", hr); + ok(num_tasks == 1, "expected 1 task, got %ld\n", num_tasks); + + ITaskFolder_DeleteTask(folder, (BSTR)L"Task1", 0); + ITaskFolder_DeleteFolder(root, (BSTR)L"\Wine", 0); + + IRegisteredTask_Release(task1); + IExecAction_Release(exec_action); + IRegistrationInfo_Release(reg_info); + ITaskDefinition_Release(task_def); + ITaskService_Release(service); +} + START_TEST(scheduler) { OleInitialize(NULL); @@ -1888,6 +1940,7 @@ START_TEST(scheduler) test_FolderCollection(); test_GetTask(); test_TaskDefinition(); + test_get_Count();
OleUninitialize(); }
From: Jacob Czekalla jczekalla@codeweavers.com
--- dlls/taskschd/regtask.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-)
diff --git a/dlls/taskschd/regtask.c b/dlls/taskschd/regtask.c index bae0d4cb0b2..d5113cca304 100644 --- a/dlls/taskschd/regtask.c +++ b/dlls/taskschd/regtask.c @@ -464,9 +464,28 @@ 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 = impl_from_IRegisteredTaskCollection(iface); + TASK_NAMES task_names = NULL; + DWORD start_index = 0, num_tasks = 0, i = 0; + + 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)
This merge request was closed by Jacob Czekalla.