如题.

解决方案 »

  1.   

    beep、Messagebeep 驱动的是声卡!
    怎样使扬声器发音?
      

  2.   

    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;
      

  3.   

    看明白了吗?先判断操作系统类型,然后根据操作系统类型分别用不同的方法NT用API,9X直接嵌入ASM完成I/O操作