Software to control an Arduino
As JohnC says, Firmata is probably what you want.  Firmata is a special sketch you load onto your Arduino.  It has a set of commands you send it over the Arduino's serial port to read and write the Arduino's inputs and outputs. There's a Processing library that you can use so you can write Processing apps to directly control the Arduino, as well as many other libraries for other computer languages running on your desktop computer (like the VB .NET one JohnC mentions).  Even if you don't have a library, you can send the commands from any language that knows how to talk to serial ports (like with Max/Pd as Andrew mentions)

I like the Processing library because Processing is open source and similar to Arduino.  A Processing sketch talking to a Firmata'd Arduino looks something like:

import cc.arduino.*;
Arduino myArduino = new Arduino(this, "/dev/tty.usbserial", 57600);
myArduino.digitalWrite(ledPin, Arduino.HIGH);
delay(1000);
myArduino.digitalWrite(ledPin, Arduino.HIGH);