Форум: "Система";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
ВнизBeep Найти похожие ветки
← →
AlexandrRya (2003-05-19 22:35) [0]Народ, кто знает, как сделать аналог Sound и Nosound в W2k? Beep мне не подходитЮ так как я не знаю, с колько времени будет продолжаться сигнал. Я делал так:
////////////////////////////////////////////////////////////////
void DoBeep(WORD wFreq, WORD wDelay)
{
DWORD dwParam;
if (bPlayed) {
TerminateThread(hThread, 0);
CloseHandle(hThread);
}
dwParam = (DWORD)MAKELONG(wFreq, wDelay);
hThread = CreateThread(NULL, 0, ThreadProc, (LPVOID)&dwParam, 0, &dwThread);
bPlayed = TRUE;
}
//////////////////////////////////////////////////////////
DWORD WINAPI ThreadProc (LPVOID lpParam)
{
DWORD dwParam;
WORD wFreq;
dwParam = *(LPDWORD)lpParam;
wFreq = HIWORD(dwParam);
Beep(wFreq+100,LOWORD(dwParam)+100);
bPlayed = FALSE;
SendMessage(hwnd, SM_SOUNDSTOP, 0, 0);
return 0;
}
/////////////////////////////////////////////////////
То есть как только сигнал нужно было прервать я просто грохал нитку :). Но при этом оказалось, что каждый раз после некорректного завершения такой нитки остается открытым файл-устройство \Device\Beep. Если кто-то знает, помогите. Может кто-то подскажет, ка закрыть уже открытый файл, зная только его имя.
Но лучше объясните, как написать Sound и NoSound. Знаю, что для этого kernel32 использует NtDeviceIoControlFile(...), может кто-то стакими чтуками сталкивался? В NtDDK она не описана, хотя пару раз упомиается в комментарих.
← →
Севостьянов Игорь (2003-05-20 11:41) [1]Какие-то сложности у тя с этим - по моему проще
DoBeep := True;
while DoBeep do
begin
Beep(100, 1);
if <условие> then DoBeep := False;
end;
← →
Севостьянов Игорь (2003-05-20 11:42) [2]Да забыл вставить либо Sleep(0); либо Apllication.ProcessMessages
← →
Bogachev (2003-05-20 20:21) [3]
USES mmsystem;
sndPlaySound("C:\TEST.WAV",SND_ASYNC); // PLAY
sndPlaySound("C:\TETS.WAV",SND_ASYNC+SND_LOOP); // Loop Mode (зацикливание)
sndPlaySound(Nil,SND_ASYNC); //STOP
Плай саунд делать в отдельной нитке а останавливать в гланой.
плюс прописать FreeOnTerminate := True побочной нитке!
← →
AlexandrRya (2003-05-20 22:28) [4]Thanks to all
To Bogachev> мне надо через спикер :)
← →
KDS (2003-05-21 17:12) [5]Используй "Бипку" из модуля "Виндовз"
Windows.Beep(1024,3000);
Цитирую Била Гейтса (из хэлпа):
The Beep function generates simple tones on the speaker. The function is synchronous; it does not return control to its caller until the sound finishes.
BOOL Beep(
DWORD dwFreq, // sound frequency, in hertz
DWORD dwDuration // sound duration, in milliseconds
);
Parameters
dwFreq
Windows NT:Specifies the frequency, in hertz, of the sound. This parameter must be in the range 37 through 32,767 (0x25 through 0x7FFF).
Windows 95:The parameter is ignored.
dwDuration
Windows NT:Specifies the duration, in milliseconds, of the sound.
Windows 95:The parameter is ignored.
← →
KDS (2003-05-21 17:14) [6]Используй "Бипку" из модуля "Виндовз"
Windows.Beep(1024,3000);
Цитирую Била Гейтса (из хэлпа):
The Beep function generates simple tones on the speaker. The function is synchronous; it does not return control to its caller until the sound finishes.
BOOL Beep(
DWORD dwFreq, // sound frequency, in hertz
DWORD dwDuration // sound duration, in milliseconds
);
Parameters
dwFreq
Windows NT:Specifies the frequency, in hertz, of the sound. This parameter must be in the range 37 through 32,767 (0x25 through 0x7FFF).
Windows 95:The parameter is ignored.
dwDuration
Windows NT:Specifies the duration, in milliseconds, of the sound.
Windows 95:The parameter is ignored.
← →
Verg (2003-05-21 21:21) [7]Windows 95:The parameter is ignored.
Вот, вот....
← →
AlexandrRya (2003-05-21 22:21) [8]To KDS:
Именно ее я и использую:
...
Beep(wFreq+100,LOWORD(dwParam)+100);
...
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2003.07.31;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.012 c