抑制 "Insert diskette to drive X:"

Suppressing "Insert diskette to drive X:"

我正在尝试检查驱动器 A: 中是否存在任何磁盘(在我的程序安装后我需要确保计算机不会从安装盘启动)。我试过使用 _access 方法(未定义的引用...)、FILE* 并在软盘中创建目录并在检查后将其删除。不幸的是 DOS 显示关于将磁盘放入驱动器 的难看的文本(破坏我的 TUI 并让用户认为驱动器中的磁盘很重要)。 那么如何抑制此消息,或者安全地检查驱动器中是否存在磁盘?

可能 BIOS INT 13H 16H: Detect Media Change - 它的状态是:

80H = diskette drive not ready or not installed

这可能会解决你的问题-我没有老式的硬件和软件来亲自测试它。

#include <dos.h>

unsigned int DetectMediaChange()
{
    union REGS regs;

    regs.h.ah = 0x16;            // Detect Media Change
    regs.h.dl = 0;               // Drive A
    int86( 0x13, &regs, &regs ); // BIOS Disk I/O INT 13h

    return regs.h.ah ;           // Status :  00H = diskette change line not active
                                 //           01H = invalid drive number
                                 //           06H = either change line is not supported or
                                 //                 disk change line is active (media was swapped)
                                 //           80H = diskette drive not ready or not installed
                                 // else= BIOS disk error code if CF is set to CY
}

好的,我明白了:

char far * bufptr;
union REGS inregs, outregs;
struct SREGS segregs;
char buf [1024];
avaliable(){
    redo:
    segread(&segregs);
    bufptr = (char far *) buf;
    segregs.es = FP_SEG(bufptr);
    inregs.x.bx = FP_OFF(bufptr);
    inregs.h.ah = 2;
    inregs.h.al = 1;
    inregs.h.ch = 0;
    inregs.h.cl = 1;
    inregs.h.dh = 0;
    inregs.h.dl = 0;
    int86x(0x13, &inregs, &outregs, &segregs);
    return outregs.x.cflag;
}

Returns 如果磁盘在驱动器中则为真。