You will need to have a program run in the background one way or another in order to do this. You could use a "lightweight" program that runs using either of the aforementioned techniques (the former is probably best since it would allow you to have a notify/system tray icon). This program could implement the scheduling interface and when a scheduled event occurs, it could run the program that will handle the scheduled event. Or you could incorporate it all into one application, although this would likely require more resources while it sits idle in the background.
As far as how you go about timing the scheduled events, using a timer would be one option (probably the least desirable, but I suppose it is a viable option). Off the top of my head, I can't think of any other great suggestions. You might want to consider looking for something along the lines of the Application.Idle event (although that, specifically, is not what you are looking for). Some sort of WinAPI action might be due.