Question

After the release of windows vista the Windows Function Beep plays a beep on your connected speakers instead of the internal one.

Is there anyway to access the old function? Would it be possible by getting hold in an older windows api? Or is there any other way i can make this possible? If so i would like the ability to set both the frequency and duration.

I should mention that I´m actually targeting the windows xp platform.

Was it helpful?

Solution

No. The function is implemented in a Kernel32.dll, which is loaded at runtime from whatever version of the OS you're currently running. Since the code isn't there in either your executable or in a system DLL, you can't run it (don't even think about copying over Kernel32.dll from a different OS version, that's just screaming for trouble).

You can try using MessageBeep instead of Beep, but that gives you less control over the output and will probably still use your sound card instead of the internal

For an interesting history of the MessageBeep function, see Larry Osterman's blog.

OTHER TIPS

The majority of computers now don't have internal speakers, so there's nothing there to access.

The function was intentionally removed in Windows 7, according to Larry Osterman's blog; this post from the archives specifically discusses that issue. It seems that Beep.sys was removed, and the functionality of that old pseudo-device driver was changed to intentionally redirect sound to the sound card instead. The article is an interesting read from a historical standpoint.

Larry is a MS employee who worked on the new audio framework for Vista and Win7, and he's been at MS since the dinosaur days (MS-DOS at least :D) so he'd probably know. :)

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top