How to schedule any file type to open at computer startup
Tags: tutorial, python, opensource, cli
Published: 2022-11-28 14:38:30

So, how about schedule certain programs or files to open first thing when your computer boots up? Or maybe you want them to open at a specific time of the day?

Maybe you work remotely and need certain programs, folders or files to open when you start your computer while you can do your morning routine. If so, then this post will feature a program which will (hopefully) help you with that!

That was my problem! I did not like having to use Windows startup feature because it did not let me open programs at specific days. Even the Windows Task Scheduler was not simple enough and did not let me schedule programs at certain days and at startup in the same configuration. I hated having to close all my work programs manually on weekends.

So, I developed a command line interface (CLI) to do that exact task: schedule programs, folders or files (anything really) at startup but also at specific days.

Now, I'm a changed person and can finally have my work programs open at startup only on week days and forget about work completely (without reminders) on weekends.

---

## **Installing**
You will need Python installed. You can do that [here](https://www.python.org/downloads/).

The CLI can be downloaded from [here](https://pypi.org/project/progscheduler/) and the GitHub repository can be found [here](https://github.com/zaytiri/program-scheduler).

```
pip install progscheduler
```

To check if the program was successfully installed, you can run the following command in the console:

```
progscheduler -h
```

---

## **How to**
For anymore information please have a look at [this](https://github.com/zaytiri/program-scheduler/blob/main/README.md) file.
` `  
### Startup feature
#### Windows users
This program does not actually have the ability to start running automatically by itself when the computer boots up yet, so you have to copy the contents of this file right [here](https://github.com/zaytiri/program-scheduler/blob/main/program-scheduler.bat) (available on the GitHub repository) and paste them to a notepad on your computer. Don't forget to save the file with the .bat extension.
The purpose of the file is run the progscheduler program. So this needs to be in the following folder path:
```
C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
```
 What this step does is to make Windows run all the files in this folder when it boots up (at startup).

#### Linux users
I don't own a Linux environment so this section will have to wait until I make sure I know how to explain this.
` `  
After this step, you should be able to boot up your computer and the program will run automatically.
` `  
### Usage
For now, when the computer boots up, the program will not do anything. This is because we did not schedule anything yet.
To do this, you need to open a command prompt to start using the CLI.
` `  
#### Commands
When configuring you will need the following information about a program, folder or file:
* path to program, folder or file;
* desired name to describe this program, folder or file;
* days to open;
* time of the day to open;
` `  
##### Path
The path can be the absolute path of an executable, a folder, a file, etc. If it's a program or a file, the path must include the extension.

**_IMPORTANT_**
If you want an executable to be schedule, some programs will not work with the original file path and it needs to be the path for a shortcut of that executable.
To use a shortcut, the extension of that file must be .lnk.

For instance, a path for a shortcut executable:
```
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk
```
or a path for a folder:
```
C:\Users\<username>\Desktop\folder to open
```
or a path for a file, 
```
C:\Users\<username>\Desktop\text file to open.txt
```
` `  
##### Alias
The alias is a name which will describe the file to be scheduled and it will be used for update the scheduling if needed in the future.
` `  
##### Days
The days will be the days in which you want something to be opened. It can be:
* some specific days: monday, wednesday
* everyday: monday, tuesday, wednesday, thursday, friday, saturday, sunday
* weekdays: monday, tuesday, wednesday, thursday, friday
* weekends: saturday, sunday

` `  
##### Time
The time can be at startup, in this case you don't have to specify anything because this is the default. Can also be a specific time of the day: 10:27.
` `  
The commands are available in the [README.md](https://github.com/zaytiri/program-scheduler/blob/main/README.md) file in the GitHub repository.
` `  
#### Create/Configure a schedule
If you want to schedule Paint to open only at week days at startup then the following command should work:
```
progscheduler -a paint -e "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk" -d weekdays
```

![create schedule at startup](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0umrprtd1zuiz120pbgy.png)

On the other hand, if you want to schedule Paint to open only on weekends and at 15:05, the following command should also work:
```
progscheduler -a paint -e "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\Paint.lnk" -d weekends -t "15:05"
```

![create schedule with specific time](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/13uep9gpqjs8wtz57aoj.png)

Now, if you want to change Paint to open only on Mondays at startup then:
```
progscheduler -a paint -d monday -t "at startup"
```

![configuration of a schedule](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bgsc5i4x7mcqighfg0kg.png)

Note the alias is required when creating or modifying a schedule. An alias needs to be unique, because if not, it can configure the wrong configuration or create a non-sense configuration.
` `  
#### Scheduling in action

After we added a schedule and the next time the computer boots up, the program will run automatically and Paint will be opened.
The following image shows that a command prompt will be opened at startup and start running all schedules created.

![scheduling in action](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gkg4ypeomixzanne8ex2.png)

If a specific time has been set, then the image does not change much, it will be running and when the specified time comes, the program will be opened and showed and this command prompt.

Upon closing this command prompt window, the program will not run anymore schedules so only close it when you know there's no files to be opened.
If closed, the next time the program will start running is:
* if the computer boots up;
* if you run manually the program-scheduler.bat;
* if you run the command 'progscheduler' in a command prompt.

` `  
### Other features
` `  
#### Delete a configuration
A configuration can also be deleted by the alias by simply typing in the command prompt:
```
progscheduler -del paint
```

---

## **Future features**

Currently the program only opens any type of file, in the future, other options can be added by user request.

---

## **Conclusion**
I'm fully available to implement new features, fixing bugs and improve anything. Just comment here or open an issue in the GitHub repository. 
Any suggestions I'm more than glad to consider them.
Any feedback is **_really_** appreciated.

For anymore information please have a look at [this](https://github.com/zaytiri/program-scheduler/blob/main/README.md) file.

The CLI can be downloaded from [here](https://pypi.org/project/progscheduler/) and the GitHub repository can be found [here](https://github.com/zaytiri/program-scheduler).
` `  
Thanks for reading :D