中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » DOS下如何编程来判断光驱已经装入?
« [1] [2] [3] [4] »
作者:
标题: DOS下如何编程来判断光驱已经装入? 上一主题 | 下一主题
wqqqing
初级用户




积分 119
发帖 7
注册 2002-12-5
状态 离线
『楼 主』:  DOS下如何编程来判断光驱已经装入?

如何在DOS下编写C或者汇编程序来判断光驱是否已经装入?
请高手指点,给个程序段落看看。
谢谢!!!

2003-1-29 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 2 楼』:  

好主意。



Wengier - 新DOS时代

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

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

2003-1-29 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
qzxym
中级用户




积分 210
发帖 39
注册 2002-12-30
状态 离线
『第 3 楼』:  

简单极了,BASIC语言就能做到,原理就是判断Mscdex.exe是否已经运行即可。

2003-1-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『第 4 楼』:  



  Quote:
以下是引用qzxym在2003-1-30 22:40:16的发言:
简单极了,BASIC语言就能做到,原理就是判断Mscdex.exe是否已经运行即可。

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




Teamwork !
2003-1-30 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 5 楼』:  

光判断MSCDEX是否加载了没用,而且还有其它的光驱扩展驱动程序,如SHSUCD等。



Wengier - 新DOS时代

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

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

2003-1-30 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 6 楼』:  

刚才我对baobolz原来提到的那个FINDRAMD的源代码进行了一番改编,改编成为了FINDCD程序,可以查找光盘所在的盘符,并设置到环境变量CDROM中。它有两个明显的优点:

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

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

[此贴子已经被作者于2003-2-8 1:05:36编辑过]





Wengier - 新DOS时代

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

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

2003-1-31 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
mys
元老会员




积分 5170
发帖 1637
注册 2002-10-16
来自 广东佛山
状态 离线
『第 7 楼』:  

非常好非常好,这样做启动盘就很方便了。



我的网志
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
2003-2-6 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (2664429)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 8 楼』:  

我又对FINDCD做了一些增强,再次传上来:

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

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


[此贴子已经被作者于2003-2-8 1:06:21编辑过]





Wengier - 新DOS时代

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

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

2003-2-6 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
nre
银牌会员

nre


积分 1210
发帖 361
注册 2002-12-28
状态 离线
『第 9 楼』:  ~

同时上传原代码吧,有利于大家水平的提高。




Teamwork !
2003-2-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 10 楼』:  

好吧,以下是此程序的部分源代码:

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

program findcd;
const
env: array[0..8]of Char='CDROM=c:';  <- 准备环境变量
var
drvs: array[0..26] 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 [bx],'A'
        inc        bx
        loop        @@l
        mov        byte ptr [bx],0
@@m:
end;

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

主调用程序(PASCAL源代码):
begin
setdrv;                              <- 调用查找光驱子程序;
if ord(drvs[0])=0 then         <- 若无光驱,显示“No CD-ROM found”;
  WriteLn('No CD-ROM found.')
else begin
  env[6]:=drvs[0];                <- 若存在光驱,将第一个光驱字母加入环境变量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和雨露,谢谢!)

2003-2-7 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
pfox
银牌会员




积分 1451
发帖 446
注册 2002-10-20
状态 离线
『第 11 楼』:  

是否支持双光驱及三光驱?




我的下载空间
2003-2-7 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 12 楼』:  

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”将显示光驱找不到(因为只有三个光驱)。


[此贴子已经被作者于2003-2-8 1:04:08编辑过]





Wengier - 新DOS时代

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

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

2003-2-8 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
pfox
银牌会员




积分 1451
发帖 446
注册 2002-10-20
状态 离线
『第 13 楼』:  

Good!

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






[此贴子已经被作者于2003-2-13 17:09:58编辑过]







我的下载空间
2003-2-8 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 14 楼』:  

不如编写个批处理文件来做到,因为若运行FINDCD 0后%CDROM%的值为光驱数目,做个批处理循环并根据光驱数目将所有的光驱字符设置到%CDROM%变量中就可以了。




Wengier - 新DOS时代

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

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

2003-2-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 15 楼』:  

我刚才编写了个简单的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和雨露,谢谢!)

2003-2-15 00:00
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: