Procedure Beep(nFreq,nDura: Word); var VerInfo: TOSVersionInfo; nStart: DWord; begin VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo); GetVersionEx(VerInfo); if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then Windows.Beep(nFreq, nDura) else begin Asm push bx in al, $61 mov bl, al and al, 3 jne @@Skip mov al, bl or al, 3 out $61, al mov al, $b6 out $43, al @@Skip: mov ax, nFreq out $42, al mov AL, ah out $42, al pop bx end; nStart := GetTickCount; repeat Application.ProcessMessages; Until GetTickCount > nStart + nDura; asm in al, $61 and al, $FC out $61, al end; end; end;
怎样使扬声器发音?
var
VerInfo: TOSVersionInfo;
nStart: DWord;
begin
VerInfo.dwOSVersionInfoSize := SizeOf(VerInfo);
GetVersionEx(VerInfo);
if VerInfo.dwPlatformId = VER_PLATFORM_WIN32_NT then
Windows.Beep(nFreq, nDura)
else
begin
Asm
push bx
in al, $61
mov bl, al
and al, 3
jne @@Skip
mov al, bl
or al, 3
out $61, al
mov al, $b6
out $43, al
@@Skip:
mov ax, nFreq
out $42, al
mov AL, ah
out $42, al
pop bx
end;
nStart := GetTickCount;
repeat
Application.ProcessMessages;
Until GetTickCount > nStart + nDura;
asm
in al, $61
and al, $FC
out $61, al
end;
end;
end;