The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
//standard MS headers
#include <windows.h>
#include <ole2.h>
#include <mstask.h>
#include <msterr.h>
#include <wtypes.h>
#include <tchar.h>

//#include <wchar.h>
//#include <initguid.h>

// perl headers
#include <EXTERN.h>
#include <perl.h>
#include <XSub.h>
#include "TConvert.h"
#include "misc.h"

#ifndef TASKSCHEDULER
#define TASKSCHEDULER

#define TASKS_TO_RETRIEVE     5
#define TOTAL_RUN_TIME_TO_FETCH     10

// set to 1 to enable debugging information
#define TSK_DEBUG 0

// define some hanby stuff for working with
// triggers

#define MY_TASK_SUNDAY "TASK_SUNDAY"
#define MY_TASK_SUNDAY_LEN 11;

#define MY_TASK_MONDAY "TASK_MONDAY"
#define MY_TASK_MONDAY_LEN 11

#define MY_TASK_TUESDAY "TASK_TUESDAY"
#define MY_TASK_TUESDAY_LEN 12

#define MY_TASK_WEDNESDAY "TASK_WEDNESDAY"
#define MY_TASK_WEDNESDAY_LEN 14

#define MY_TASK_THURSDAY "TASK_THURSDAY"
#define MY_TASK_THURSDAY_LEN 13

#define MY_TASK_FRIDAY "TASK_FRIDAY"
#define MY_TASK_FRIDAY_LEN 11

#define MY_TASK_SATURDAY "TASK_SATURDAY"
#define MY_TASK_SATURDAY_LEN 13

#define MY_TASK_FIRST_WEEK "TASK_FIRST_WEEK"
#define MY_TASK_FIRST_WEEK_LEN 15

#define MY_TASK_SECOND_WEEK "TASK_SECOND_WEEK"
#define MY_TASK_SECOND_WEEK_LEN 16

#define MY_TASK_THIRD_WEEK "TASK_THIRD_WEEK"
#define MY_TASK_THIRD_WEEK_LEN 15

#define MY_TASK_FOURTH_WEEK "TASK_FOURTH_WEEK"
#define MY_TASK_FOURTH_WEEK_LEN 16

#define MY_TASK_LAST_WEEK "TASK_LAST_WEEK"
#define MY_TASK_LAST_WEEK_LEN 14

#define MY_TASK_JANUARY "TASK_JANUARY"
#define MY_TASK_JANUARY_LEN 12

#define MY_TASK_FEBRUARY "TASK_FEBRUARY"
#define MY_TASK_FEBRUARY_LEN 13

#define MY_TASK_MARCH "TASK_MARCH"
#define MY_TASK_MARCH_LEN 10

#define MY_TASK_APRIL "TASK_APRIL"
#define MY_TASK_APRIL_LEN 10

#define MY_TASK_MAY "TASK_MAY"
#define MY_TASK_MAY_LEN 8

#define MY_TASK_JUNE "TASK_JUNE"
#define MY_TASK_JUNE_LEN 9

#define MY_TASK_JULY "TASK_JULY"
#define MY_TASK_JULY_LEN 9

#define MY_TASK_AUGUST "TASK_AUGUST"
#define MY_TASK_AUGUST_LEN 11

#define MY_TASK_SEPTEMBER "TASK_SEPTEMBER"
#define MY_TASK_SEPTEMBER_LEN 14

#define MY_TASK_OCTOBER "TASK_OCTOBER"
#define MY_TASK_OCTOBER_LEN 12

#define MY_TASK_NOVEMBER "TASK_NOVEMBER"
#define MY_TASK_NOVEMBER_LEN 13

#define MY_TASK_DECEMBER "TASK_DECEMBER"
#define MY_TASK_DECEMBER_LEN 13

#define MY_TASK_FLAG_INTERACTIVE "TASK_FLAG_INTERACTIVE"
#define MY_TASK_FLAG_INTERACTIVE_LEN 21

#define MY_TASK_FLAG_DELETE_WHEN_DONE "TASK_FLAG_DELETE_WHEN_DONE"
#define MY_TASK_FLAG_DELETE_WHEN_DONE_LEN 26

#define MY_TASK_FLAG_DISABLED "TASK_FLAG_DISABLED"
#define MY_TASK_FLAG_DISABLED_LEN 18

#define MY_TASK_FLAG_START_ONLY_IF_IDLE "TASK_FLAG_START_ONLY_IF_IDLE"
#define MY_TASK_FLAG_START_ONLY_IF_IDLE_LEN 28

#define MY_TASK_FLAG_KILL_ON_IDLE_END "TASK_FLAG_KILL_ON_IDLE_END"
#define MY_TASK_FLAG_KILL_ON_IDLE_END_LEN 26

#define MY_TASK_FLAG_DONT_START_IF_ON_BATTERIES "TASK_FLAG_DONT_START_IF_ON_BATTERIES"
#define MY_TASK_FLAG_DONT_START_IF_ON_BATTERIES_LEN 36

#define MY_TASK_FLAG_KILL_IF_GOING_ON_BATTERIES "TASK_FLAG_KILL_IF_GOING_ON_BATTERIES"
#define MY_TASK_FLAG_KILL_IF_GOING_ON_BATTERIES_LEN 36

#define MY_TASK_FLAG_RUN_ONLY_IF_DOCKED "TASK_FLAG_RUN_ONLY_IF_DOCKED"
#define MY_TASK_FLAG_RUN_ONLY_IF_DOCKED_LEN 28

#define MY_TASK_FLAG_HIDDEN "TASK_FLAG_HIDDEN"
#define MY_TASK_FLAG_HIDDEN_LEN 16

#define MY_TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET "TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET"
#define MY_TASK_FLAG_RUN_IF_CONNECTED_TO_INTERNET_LEN 38

#define MY_TASK_FLAG_RESTART_ON_IDLE_RESUME "TASK_FLAG_RESTART_ON_IDLE_RESUME"
#define MY_TASK_FLAG_RESTART_ON_IDLE_RESUME_LEN 32

#define MY_TASK_FLAG_SYSTEM_REQUIRED "TASK_FLAG_SYSTEM_REQUIRED"
#define MY_TASK_FLAG_SYSTEM_REQUIRED_LEN 25

#define MY_TASK_TRIGGER_FLAG_HAS_END_DATE "TASK_TRIGGER_FLAG_HAS_END_DATE"
#define MY_TASK_TRIGGER_FLAG_HAS_END_DATE_LEN 30

#define MY_TASK_TRIGGER_FLAG_KILL_AT_DURATION_END "TASK_TRIGGER_FLAG_KILL_AT_DURATION_END"
#define MY_TASK_TRIGGER_FLAG_KILL_AT_DURATION_END_LEN 38

#define MY_TASK_TRIGGER_FLAG_DISABLED "TASK_TRIGGER_FLAG_DISABLED"
#define MY_TASK_TRIGGER_FLAG_DISABLED_LEN 26

#define MY_TASK_MAX_RUN_TIMES "TASK_MAX_RUN_TIMES"
#define MY_TASK_MAX_RUN_TIMES_LEN 18

#define MY_REALTIME_PRIORITY_CLASS "REALTIME_PRIORITY_CLASS"
#define MY_REALTIME_PRIORITY_CLASS_LEN 23

#define MY_HIGH_PRIORITY_CLASS "HIGH_PRIORITY_CLASS"
#define MY_HIGH_PRIORITY_CLASS_LEN 19

#define MY_NORMAL_PRIORITY_CLASS "NORMAL_PRIORITY_CLASS"
#define MY_NORMAL_PRIORITY_CLASS_LEN 21

#define MY_IDLE_PRIORITY_CLASS "IDLE_PRIORITY_CLASS"
#define MY_IDLE_PRIORITY_CLASS_LEN 19

#define MY_INFINITE "INFINITE"
#define MY_INFINITE_LEN 8

#define MY_BeginYear "BeginYear"
#define MY_BeginYear_LEN 9

#define MY_BeginMonth "BeginMonth"
#define MY_BeginMonth_LEN 10

#define MY_BeginDay "BeginDay"
#define MY_BeginDay_LEN 8

#define MY_EndYear "EndYear"
#define MY_EndYear_LEN 7

#define MY_EndMonth "EndMonth"
#define MY_EndMonth_LEN 8

#define MY_EndDay "EndDay"
#define MY_EndDay_LEN 6

#define MY_StartHour "StartHour"
#define MY_StartHour_LEN 9

#define MY_StartMinute "StartMinute"
#define MY_StartMinute_LEN 11

#define MY_MinutesDuration "MinutesDuration"
#define MY_MinutesDuration_LEN 15

#define MY_MinutesInterval "MinutesInterval"
#define MY_MinutesInterval_LEN 15

#define MY_Flags "Flags"
#define MY_Flags_LEN 5

#define MY_TriggerType "TriggerType"
#define MY_TriggerType_LEN 11

#define MY_Type "Type"
#define MY_Type_LEN 4

#define MY_RandomMinutesInterval "RandomMinutesInterval"
#define MY_RandomMinutesInterval_LEN 21

#define MY_DaysInterval "DaysInterval"
#define MY_DaysInterval_LEN 12

#define MY_WeeksInterval "WeeksInterval"
#define MY_WeeksInterval_LEN 13

#define MY_DaysOfTheWeek "DaysOfTheWeek"
#define MY_DaysOfTheWeek_LEN 13

#define MY_Days "Days"
#define MY_Days_LEN 4

#define MY_Months "Months"
#define MY_Months_LEN 6

#define MY_WhichWeek "WhichWeek"
#define MY_WhichWeek_LEN 9

#endif