中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-17 04:14
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » DOS下如何编程来判断光驱已经装入? 查看 7,103 回复 45
楼 主 DOS下如何编程来判断光驱已经装入? 发表于 2003-01-29 00:00 ·  中国 广西 百色 电信
初级用户
积分 119
发帖 7
注册 2002-12-05 00:00
UID 419
性别 男
状态 离线
如何在DOS下编写C或者汇编程序来判断光驱是否已经装入?
请高手指点,给个程序段落看看。
谢谢!!!
2 发表于 2003-01-29 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
好主意。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

3 发表于 2003-01-30 00:00 ·  中国 浙江 衢州 电信
中级用户
积分 210
发帖 39
注册 2002-12-30 00:00
UID 638
性别 男
状态 离线
简单极了,BASIC语言就能做到,原理就是判断Mscdex.exe是否已经运行即可。
4 发表于 2003-01-30 00:00 ·  中国 北京 263网络通信股份有限公司
银牌会员
★★★
nre
积分 1,210
发帖 361
注册 2002-12-28 00:00
UID 629
性别 男
状态 离线
以下是引用qzxym在2003-1-30 22:40:16的发言:
简单极了,BASIC语言就能做到,原理就是判断Mscdex.exe是否已经运行即可。

说这种话有什么意义。 具体怎么实现?

Teamwork !
5 发表于 2003-01-30 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
光判断MSCDEX是否加载了没用,而且还有其它的光驱扩展驱动程序,如SHSUCD等。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

6 发表于 2003-01-31 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
刚才我对baobolz原来提到的那个FINDRAMD的源代码进行了一番改编,改编成为了FINDCD程序,可以查找光盘所在的盘符,并设置到环境变量CDROM中。它有两个明显的优点:

1:完全支持CLOAKING+MSCDEX,而网上的那个FINDCD.COM 1.02则不支持;
2:可以直接将光盘盘符设到变量CDROM中,操作非常方便,而不用判断任何ERRORLEVEL值。

我已将它传到论坛上来了,下载地址:
打开附件 链接已失效(管理员注 2009-4-28)

Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

7 发表于 2003-02-06 00:00 ·  中国 广东 佛山 禅城区 电信
元老会员
★★★★
积分 5,170
发帖 1,637
注册 2002-10-16 00:00
UID 8
性别 男
来自 广东佛山
状态 离线
非常好非常好,这样做启动盘就很方便了。
我的网志
http://hzmys.blog.163.com/
我的网盘
firststep.qjwm.com
fsmys.ys168.com
ssmys.ys168.com
www.brsbox.com/fsmys
www.brsbox.com/ssmys
www.brsbox.com/ccdos
8 发表于 2003-02-06 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
我又对FINDCD做了一些增强,再次传上来:

打开附件 链接已失效(管理员注 2009-4-28)

注:它还修正了无光驱时会死机的BUG。


Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

9 ~ 发表于 2003-02-07 00:00 ·  中国 北京 263网络通信股份有限公司
银牌会员
★★★
nre
积分 1,210
发帖 361
注册 2002-12-28 00:00
UID 629
性别 男
状态 离线
同时上传原代码吧,有利于大家水平的提高。

Teamwork !
10 发表于 2003-02-07 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
好吧,以下是此程序的部分源代码:

程序初始化部分(PASCAL源代码):

program findcd;
const
env: arrayof Char='CDROM=c:'; <- 准备环境变量
var
drvs: array of Char; <- 光驱字符列表
envp: PChar;

查找光驱子程序(汇编源代码):

procedure setdrv; assembler;
asm mov bx,0
mov ax,1500h
int 2fh <- 调用中断取得光驱状态
cmp bx,1 <- 检查光驱是否安装
jc @@m <- 若无,退出子程序
push bx
push ds
pop es
mov bx,offset drvs
mov ax,150Dh
int 2Fh
pop cx
@@l: add byte ptr ,'A'
inc bx
loop @@l
mov byte ptr ,0
@@m:
end;

添加环境变量子程序(汇编源代码,略);

主调用程序(PASCAL源代码):
begin
setdrv; <- 调用查找光驱子程序;
if ord(drvs)=0 then <- 若无光驱,显示“No CD-ROM found”;
WriteLn('No CD-ROM found.'
else begin
env:=drvs; <- 若存在光驱,将第一个光驱字母加入环境变量CDROM;
WriteLn(env); <- 在屏幕上显示“CDROM=x:”;
if not InsertEnvVar <- 调用添加环境变量子程序;
then WriteLn('Cannot set environment variable!'; <- 若无法加入环境变量,显示错误;
exit;
end;
end. <- 程序结束。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

11 发表于 2003-02-07 00:00 ·  中国 广东 汕头 电信
银牌会员
★★★
积分 1,451
发帖 446
注册 2002-10-20 00:00
UID 29
性别 男
状态 离线
是否支持双光驱及三光驱?
12 发表于 2003-02-08 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
pfox:好主意,因此我刚才对FINDCD又进行了一番增强,在此下载:
打开附件 链接已失效(管理员注 2009-4-28)

此版本的特点是,“FINDCD n”(n是数字)将把CDROM环境变量设置为第n个光驱。若未指定n,则默认为第一个光驱(即n=1)。若n的值为0或非数字,则将CDROM值设置为光驱的数目。

假设现有E:、F:、G:盘三个光驱,那么运行“FINDCD”或“FINDCD 1”将得到“CDROM=E:”,运行“FINDCD 3”将得到“CDROM=G:”;若运行“FINDCD 0”将得到“CDROM=3”(即有三个光驱);若运行“FINDCD 4”将显示光驱找不到(因为只有三个光驱)。


Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

13 发表于 2003-02-08 00:00 ·  中国 广东 汕头 电信
银牌会员
★★★
积分 1,451
发帖 446
注册 2002-10-20 00:00
UID 29
性别 男
状态 离线
Good!

Wengier,能否再增强一下,在不加参数运行FindCD后,
直接将第一个CDROM的盘符赋给CDROM环境变量,若存在
第二个、第三个CDROM盘符直接赋给CDROM1、CDROM2?
这样在启动盘里面就可以直接用cda.exe判断光驱里面是否
有盘及是否有存在的文件,若有就可以直接执行或调用。






14 发表于 2003-02-15 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
不如编写个批处理文件来做到,因为若运行FINDCD 0后%CDROM%的值为光驱数目,做个批处理循环并根据光驱数目将所有的光驱字符设置到%CDROM%变量中就可以了。
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

15 发表于 2003-02-15 00:00 ·  美国 肯塔基州 费耶特县 列克星敦 Charter_Communications
系统支持
★★★★★★
“新DOS时代”站长
积分 27,736
发帖 10,521
注册 2002-10-09 12:00
UID 9
状态 离线
我刚才编写了个简单的DOS批处理文件,可以通过上面的FINDCD程序方便地将CDROM1,CDROM2等依次设置为光驱盘符.程序如下:
@echo off
set n=0
:loop
set cdrom=
findcd %n% (即: 调用上面的FINDCD)
if %n%==0 set cdn=%cdrom%
if not %n%==0 set cdrom%n%=%cdrom%
if %n%#==%cdn%# goto end
count n (即: n=n+1)
goto loop
:end
set n=
set cdn=
set cdrom=
echo.
Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

论坛跳转: