I thought this may be useful to others, as it took me a while to get working.

Although parallel ports are becoming less common, our new computers came with them, and they're useful for some simple switching tasks.
Connecting the outputs to transistors (or ULN2003 darlington transistor array in our case) and you can use it to switch all sorts. At the moment we use it to control the telescope fan, IR LEDs for our webcam, and an indicator LED on the door to let people outside know when Scheduler is controlling the dome/telescope. This still leaves us with 5 extra outputs for more as we think of them.

The way we use is with the IO OCX ActiveX control http://home.comcast.net/~hardandsoftware/IO_OCX.htm
Then this is the relevent code used in our (JS) user action:

Code:
function ImageStart(Interval, Binning, Subframe, FilterNum, ForPointing)
{
    Util.Console.PrintLine("Turning off IR LEDs");
    var IO1;
    IO1 = new ActiveXObject("IOcx.IOOcx");
    IO1.WriteAddress = 888;
    IO1.WriteIO(3);

    return true;
}
In this case the byte 3 means that the fan and door light are on, but the IR LEDs are turned off for the exposure.

Though in theory you can attach relays and use them to control power to telescopes/cameras...etc, be aware that they may change state unexpectedly when not under ACP's control (computer start up in particular). So it may not be great for important things like this.

Hope this is useful to someone,
David