抑制 "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, ®s, ®s ); // 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 如果磁盘在驱动器中则为真。
我正在尝试检查驱动器 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, ®s, ®s ); // 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 如果磁盘在驱动器中则为真。