You want to be able to play it synchronously, yet be able to stop it playing. Can't do that, because PlaySound won't return until it's already finished. You want to play it asynchronously, and get notified when it's stopped playing. Can't do that, because PlaySound provides no notifications. However, if you read what I wrote, you can get the behaviours that you want. Spin another thread to call PlaySound synchronously. That thread can tell you when it's finished, and the effect on the other thread is that of playing it asynchronously. If you want to stop it playing, you can call playsound with a purge option (as someone else has suggested) from the original thread, which will give you what you want. Alternatively, you can try the MCI interface, or look at the waveOut* functions. However, using waveOut is a lot more complicated than using PlaySound with a second thread There's a phrase which comes to mind: If you won't like the answer, don't ask the question...
Steve S Developer for hire