System - PC-Lautsprecher (Speaker) unter Windows
-
Hallo!
Es gibt in der WinAPI ja die Funktion Beep(). Deren Parameter unter Win98 ignoriert werden. Wie ist es dennoch möglich unter Win98 einen Signalton über den Pc-Lautsprecher auszugeben. Ich habe zwar irgendwo schon Code gefunden für C++. Aber irgendwie gings dann doch nicht!
Danke
[ Dieser Beitrag wurde am 30.06.2002 um 18:38 Uhr von Jansen editiert. ]
-
Ich denke, ich habe da eine ausgereifte Lösung, ich arbeite viel damit, ist vielleicht mal was für die FAQ. Das ganze arbeitet unter allen Windows-Versionen, indem zunächst die Version abgefrag wird.
void Delay(int MSecs) { unsigned long FirstTickCount; FirstTickCount=GetTickCount(); do { MSG msg; if (PeekMessage (&msg, NULL, NULL, NULL, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Sleep(0); } } while ((GetTickCount() - FirstTickCount) < (unsigned long)(MSecs)); } void Play(int Frequency, int Duration) { unsigned long dwVersion = GetVersion(); if (dwVersion < 0x80000000) Beep (Frequency, Duration); else { unsigned short pitch = (unsigned short) (Frequency); asm mov bx, pitch asm mov ax, 34DDh asm mov dx, 0012h asm cmp dx, bx asm jnb Stop asm div bx asm mov bx,ax asm in al, 61h asm test al, 3 asm jne J1 asm or al, 3 asm out 61h, al asm mov al, 0B6h asm out 43h, al J1: asm mov al, bl asm out 42h, al asm mov al, bh asm out 42h, al Stop: Delay(Duration); asm in al, 61h asm and al, 0fch asm out 61h, al } }
[ Dieser Beitrag wurde am 13.03.2002 um 16:27 Uhr von Jansen editiert. ]
-
Danke, kommt in die FAQ.
Anzumerken wäre evtl. noch, dass Besitzer der BCB-Standardversionen hier wahrscheinlich leer ausgehen, da letztere üblicherweise ohne Assemblercompiler ausgeliefert werden.
PS: Habe mir erlaubt, zur besseren Lesbarkeit die Codeeinrückungen zu optmieren.
Edit:
Zum Thema BCB-Standard und Assembler siehe auch
hier.[ Dieser Beitrag wurde am 27.02.2003 um 12:44 Uhr von Jansen editiert. ]