win32-taskscheduler 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,103 +0,0 @@
1
- #define WIN32_TASKSCHEDULER_VERSION "0.1.0"
2
-
3
- // Prototype
4
- static VALUE ts_new_work_item(VALUE self, VALUE job, VALUE trigger);
5
-
6
- #ifdef __cplusplus
7
- # define VALUEFUNC(f) ((VALUE (*)(ANYARGS)) f)
8
- # define VOIDFUNC(f) ((RUBY_DATA_FUNC) f)
9
- #else
10
- # define VALUEFUNC(f) (f)
11
- # define VOIDFUNC(f) (f)
12
- #endif
13
-
14
- #define TASKS_TO_RETRIEVE 5
15
- #define TOTAL_RUN_TIME_TO_FETCH 10
16
- #define ERROR_BUFFER 1024
17
-
18
- #ifndef NAME_MAX
19
- #define NAME_MAX 256
20
- #endif
21
-
22
- // I dug these out of WinBase.h
23
- #ifndef BELOW_NORMAL_PRIORITY_CLASS
24
- #define BELOW_NORMAL_PRIORITY_CLASS 0x00004000
25
- #endif
26
-
27
- #ifndef ABOVE_NORMAL_PRIORITY_CLASS
28
- #define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
29
- #endif
30
-
31
- #ifndef TASK_FLAG_RUN_ONLY_IF_LOGGED_ON
32
- #define TASK_FLAG_RUN_ONLY_IF_LOGGED_ON 0x2000
33
- #endif
34
-
35
- static VALUE cTSError;
36
-
37
- struct tsstruct {
38
- ITaskScheduler *pITS;
39
- ITask *pITask;
40
- };
41
-
42
- typedef struct tsstruct TSStruct;
43
-
44
- static void ts_free(TSStruct *p){
45
- if(p->pITask != NULL)
46
- p->pITask->Release();
47
-
48
- if(p->pITS != NULL)
49
- p->pITS->Release();
50
-
51
- CoUninitialize();
52
- free(p);
53
- }
54
-
55
- static VALUE obj_free(VALUE obj){
56
- rb_gc();
57
- return Qnil;
58
- }
59
-
60
- DWORD bitFieldToHumanDays(DWORD day){
61
- return (DWORD)((log((double)day)/log((double)2))+1);
62
- }
63
-
64
- DWORD humanDaysToBitField(DWORD day){
65
- return (DWORD)pow((double)2, (int)(day-1));
66
- }
67
-
68
- // Return an error code as a string
69
- LPTSTR ErrorString(DWORD p_dwError)
70
- {
71
- HLOCAL hLocal = NULL;
72
- static char ErrStr[1024];
73
- int len;
74
-
75
- if (!(len=FormatMessage(
76
- FORMAT_MESSAGE_ALLOCATE_BUFFER |
77
- FORMAT_MESSAGE_FROM_SYSTEM |
78
- FORMAT_MESSAGE_IGNORE_INSERTS,
79
- NULL,
80
- p_dwError,
81
- MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
82
- (LPTSTR)&hLocal,
83
- 0,
84
- NULL)))
85
- {
86
- rb_raise(rb_eStandardError,"Unable to format error message");
87
- }
88
- memset(ErrStr, 0, ERROR_BUFFER);
89
- strncpy(ErrStr, (LPTSTR)hLocal, len-2); // remove \r\n
90
- LocalFree(hLocal);
91
- return ErrStr;
92
- }
93
-
94
- /* Private internal function that validates that the TS and ITask struct
95
- * members are not null.
96
- */
97
- void check_ts_ptr(TSStruct* ptr, const char* func_name){
98
- if(ptr->pITS == NULL)
99
- rb_raise(cTSError, "Fatal error: null pointer (%s)", func_name);
100
-
101
- if(ptr->pITask == NULL)
102
- rb_raise(cTSError, "No currently active task");
103
- }