Форум: "WinAPI";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизРабота с системным динамиком) Найти похожие ветки
← →
La_Grange (2005-12-14 19:39) [0]В virtual pascal имеется внешняя процедура beep(freq,duration)
Очень нужен исходный код этой процедуры для vp.
Вообще мне просто надо разбить эту процедуру на 2: включение системного динамика и выключение.
Есть идеи?
Заранее благодарен.
← →
umbra © (2005-12-15 11:46) [1]а разве он не включен постоянно во время работы компьютера?
← →
TUser © (2005-12-15 12:18) [2]Это апи-функция. Соотв. в Delphi ты ее можешь использовать точно так же. Разбить на 2 нельзя, но можно сделать так, что пищать будет долго.
← →
PVOzerski © (2005-12-15 15:17) [3]Ты ж даже платформу не указал. VP был под OS/2, под Win32 и под Linux. И исходники RTL в VP открыты. Beep реализован через SysBeep, а SysBeep - по-разному: в Win32 - через Win32-API-шный MessageBeep, в OS/2 - через PM_Alarm, в Linux - никак.
← →
La_Grange (2005-12-15 19:51) [4]Эмм, извините, Win32.
Если на 2 разбить никак, то может можно ее как-нибудь научиться прерывать?
← →
Se (2005-12-15 20:56) [5]procedure Sound(Frequency:word; Duration: Integer);
begin
if Win32Platform=VER_PLATFORM_WIN32_NT then begin
Windows.Beep(Frequency, Duration);
end
else begin
asm
mov al, 0b6H
out 43H, al
mov ax,Frequency
out 42h,al
ror ax,8
out 42h,al
in al, 61H
or al, 03H
out 61H, al
end;
sleep(Duration);
asm
in al, 61H
and al, 0fcH
out 61H, al
end;
end;
end;
procedure Delay(Duration: Integer);
begin
Windows.Sleep(Duration);
end;
← →
La_Grange (2005-12-16 16:26) [6]он падает на строчке:
out 43H, al
Пишет:
XCPT_PRIVILEGED_INSTRUCTION
(C0000096) at 00401005, TID = 0E40
Что с этим делать?
← →
Se (2005-12-17 09:35) [7]А какой у тебя Windows?
← →
La_Grange (2005-12-18 21:21) [8]Windows XP Corporate Edition SP2 RUS
← →
Anatoly Podgoretsky © (2005-12-18 21:27) [9]А какой код? Данный огрызок слишком маленькийю
← →
DC-AC (2005-12-19 09:14) [10]Под NT-системы нужно использовать драйвер прямого доступа к портам. Например DLPortIO. Ниже небольшая процедура извлечения довольно мелодичного звука.
procedure Sound;
var bTemp: Byte; Count: Integer;
begin
bTemp := DLPortIO.Port[$61];
DLPortIO.Port[$43] := 182;
for Count:=1 to 10 do
begin
DLPortIO.Port[$42] := $30; // set frequency
DLPortIO.Port[$42] := $4; // set frequency
DLPortIO.Port[$61] := bTemp or 3;
Sleep(50);
Application.ProcessMessages;
DLPortIO.Port[$42] := $30; // set frequency
DLPortIO.Port[$42] := $3; // set frequency
DLPortIO.Port[$61] := bTemp or 3;
Sleep(50);
Application.ProcessMessages;
end;
DLPortIO.Port[$61] := bTemp;
end;
← →
La_Grange (2005-12-20 01:49) [11]Всем спасибо
Вроде сам разобрался
Просто вызываю через thread Windows.beep, а в нужный момент - прерываю=))
← →
Германн © (2005-12-20 02:02) [12]
> Se (17.12.05 09:35) [7]
>
> А какой у тебя Windows?
> <Цитата>
> La_Grange (18.12.05 21:21) [8]
>
> Windows XP Corporate Edition SP2 RUS
>
А программу ты делаешь под себя? И под свою ОС?
← →
La_Grange (2005-12-20 23:10) [13]Делаю для себя=)
А идти вроде должна под любой XP, мне других пока не надо))
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.014 c