-Поиск по дневнику

Поиск сообщений в lj_ru_delphi

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 27.06.2007
Записей:
Комментариев:
Написано: 4


PC Beeper - играем на спикере

Пятница, 28 Февраля 2014 г. 16:40 + в цитатник
Лет 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


 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку