There are many ways to have only one instance of a program running and communicate with it.
You can run the program as a service and communicate with the service using named pipes.
Or you can send a custom message to an already running program using
RegisterWindowMessage
.
You can even use named events to communicate with the running program.
To customize the windows shell, the recommended way is to use shell extensions.
Here is a great set of articles on writing shell extensions -
The Complete Idiot's Guide to Writing Shell Extensions - Index[
^]