Have you ever wondered how to add your own sound events to the Sounds section of the Control Panel? Of course, nothing is mentioned in the MSDN on how to do it - probably some undocumented API somewhere - so all the hard work discovering what to do had to be fathomed out empirically.
This article was inspired by another on CodeProject which outlines what needs to be done, but doesn't actually present any code.
The following addresses this problem and also provides a method of playing the sound events, which has proven problematic to some people.
The interface to this class is very simple, only providing 7 functions, but that's all you need :-)
As an example of the simplicity of this class, here is the test program I used whilst writing the class...
int main(int argc, char* argv)
sa.CreateGroup(_T("SoundApp"), _T("Sound Scheme Application"));
sa.Create(_T("Start"), _T("Start Sound"), _T("%systemRoot%\\media\\ding.wav"));
This program creates a sound group, creates a single sound event, plays it, then deletes everything from the registry. Obviously, the deleting part should be done when uninstalling your application, but the creation should really be done when the program is run for the first time (for each user) as the registry settings are per user rather than system wide, and you don't want some people to miss out on the aural masterpiece your application will produce, do you.
bool CreateGroup(LPCTSTR szGroupName, LPCTSTR szTitle);
bool OpenGroup(LPCTSTR szGroupName);
bool DeleteGroup(LPCTSTR szGroupName);
bool Create(LPCTSTR szName, LPCTSTR szTitle, LPCTSTR szWavPath);
bool Delete(LPCTSTR szName);
Play sound function
bool Play(LPCTSTR szName, DWORD dwOptions=0);
A sound group is basically a place to store the sound alerts associated with your application. You can create as many groups as you like (but you also have to keep track of them !). To access a group, you need to either create it, or open it.
Create(LPCTSTR szName, LPCTSTR szTitle, LPCTSTR szWavPath)
szName - Name of the event
szTitle - Name of the event shown in the Control Panel
szWavPath - Path of the sound file to play. This can be a fully qualified path or just a filename (if the file is stored in the %systemRoot%\media directory, or specified using one of the environment variables (%windir%\my app)).
szName - Name of the event to delete
Play(LPCTSTR szName, DWORD dwOptions=0)
szName - the name of the event to play
dwOptions - any of the standard PlaySound options
Hopefully, this article will allow you to add all important sound events to your otherwise quiet application - with a simple and effective class.
No MFC was harmed in the making of this class - and boy, was it hard not to :-)