Лет n-дцать назад компьютеры пищали только встроенным динамиком. Этот динамик и сейчас есть. Только добраться до него трудно. Но возможность попищать есть и теперь.
Причем ключевые строки довольно простые:
ioDLLInstance := LoadLibrary('inpoutx64.dll');
if ioDLLInstance >= 32 then { if <=32 - error ! }
begin
@InputPort := GetProcAddress(ioDLLInstance, 'Inp32');
@OutputPort := GetProcAddress(ioDLLInstance, 'Out32');
end
Сначала нужно сказать, что доступ до динамика идет через порты. Что бы добраться до портов нам нужно инсталлировать InpOut32 ( В папке Drivers\Win32\находим файл InstallDriver.exe и запускаем его от имени администратора). Программа импортирует две функции (реально их чуть больше): 'Inp32' и 'Out32'. Для x64 используется inpoutx64.dll, для 32-битных систем inpout32.dll . Работает как на Win XP, так и на Win 7 x64.
А теперь сама функция писка:
procedure Beep(const Tone, Time: Integer);
var
v, div1: Integer;
begin
div1 := 1193180 div Tone;
OutputPort($43, 182);
OutputPort($42, div1 and $FF);
OutputPort($42, (div1 shr 8) and $FF);
v := InputPort($61);
OutputPort($61, v or $03);
Sleep(Time);
v := InputPort($61);
OutputPort($61, v and $FC);
end;
По адресу
https://dl.dropboxusercontent.com/u/60542510/PcBeep.7z можно скачать рабочий пример и исходные коды. Хотелось бы увидеть (например) реализацию скайп-звонка через pc beeper (кто-то в интернете такое уже делал).
PS. не забудьте установить драйвера.
https://ru-delphi.livejournal.com/271118.html