From: Sven Baars sbaars@codeweavers.com
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=52994 --- dlls/mstask/task.c | 5 ++++- dlls/mstask/tests/task_trigger.c | 16 ++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-)
diff --git a/dlls/mstask/task.c b/dlls/mstask/task.c index d2a03aa8b56..c3113ebbb72 100644 --- a/dlls/mstask/task.c +++ b/dlls/mstask/task.c @@ -516,12 +516,15 @@ static HRESULT WINAPI MSTASK_ITask_GetNextRunTime(ITask *iface, SYSTEMTIME *rt)
case TASK_TIME_TRIGGER_ONCE: st = current_st; + st.wYear = This->trigger[i].wBeginYear; + st.wMonth = This->trigger[i].wBeginMonth; + st.wDay = This->trigger[i].wBeginDay; st.wHour = This->trigger[i].wStartHour; st.wMinute = This->trigger[i].wStartMinute; st.wSecond = 0; st.wMilliseconds = 0; SystemTimeToFileTime(&st, &trigger_ft); - if (CompareFileTime(&begin_ft, &trigger_ft) <= 0 && CompareFileTime(&trigger_ft, &end_ft) < 0) + if (CompareFileTime(&trigger_ft, ¤t_ft) >= 0 && CompareFileTime(&trigger_ft, &end_ft) < 0) { if (!have_best_time || CompareFileTime(&trigger_ft, &best_ft) < 0) { diff --git a/dlls/mstask/tests/task_trigger.c b/dlls/mstask/tests/task_trigger.c index 24b873770d2..236540cf0ee 100644 --- a/dlls/mstask/tests/task_trigger.c +++ b/dlls/mstask/tests/task_trigger.c @@ -525,6 +525,22 @@ static void test_GetNextRunTime(void) hr = ITaskTrigger_SetTrigger(trigger, &data); ok(hr == S_OK, "got %#lx\n", hr);
+ memset(&st, 0xff, sizeof(st)); + hr = ITask_GetNextRunTime(task, &st); + ok(hr == S_OK, "got %#lx\n", hr); + ok(!memcmp(&st, &cmp, sizeof(st)), "got %u/%u/%u wday %u %u:%02u:%02u\n", + st.wDay, st.wMonth, st.wYear, st.wDayOfWeek, + st.wHour, st.wMinute, st.wSecond); + + hr = ITaskTrigger_GetTrigger(trigger, &data); + ok(hr == S_OK, "got %#lx\n", hr); + data.rgFlags &= ~TASK_TRIGGER_FLAG_DISABLED; + data.TriggerType = TASK_TIME_TRIGGER_ONCE; + /* add 1 day to test triggers in the far future */ + trigger_add_ms(&data, 24 * 60 * 60 * 1000, &cmp); + hr = ITaskTrigger_SetTrigger(trigger, &data); + ok(hr == S_OK, "got %#lx\n", hr); + memset(&st, 0xff, sizeof(st)); hr = ITask_GetNextRunTime(task, &st); ok(hr == S_OK, "got %#lx\n", hr);