c语言 - 抑制"Insert diskette to drive X:"



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

可能是 BIOS INT 13H 16H:检测介质更改 - 它有一个状态:

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;
}

如果磁盘在驱动器中,则返回 true。

相关内容

  • 没有找到相关文章

最新更新