![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-09-15 03:44 |
共 47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,268 会员排行 |
| DOS开发编程 & 发展交流 (开发室) » DOS下如何编程来判断光驱已经装入? |
| 可打印版本 7,771 / 45 |
| 第1楼 wqqqing | 发表于 2003-01-29 00:00 |
| 初级用户 发帖 7 积分 119 | |
|
DOS下如何编程来判断光驱已经装入? 如何在DOS下编写C或者汇编程序来判断光驱是否已经装入?
请高手指点,给个程序段落看看。 谢谢!!! |
|
| 第2楼 Wengier | 发表于 2003-01-29 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
好主意。
|
|
| 第3楼 qzxym | 发表于 2003-01-30 00:00 |
| 中级用户 发帖 39 积分 210 | |
|
简单极了,BASIC语言就能做到,原理就是判断Mscdex.exe是否已经运行即可。
|
|
| 第4楼 nre | 发表于 2003-01-30 00:00 |
| 银牌会员 发帖 361 积分 1,210 | |
以下是引用qzxym在2003-1-30 22:40:16的发言: 说这种话有什么意义。 具体怎么实现? |
|
| 第5楼 Wengier | 发表于 2003-01-30 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
光判断MSCDEX是否加载了没用,而且还有其它的光驱扩展驱动程序,如SHSUCD等。
|
|
| 第6楼 Wengier | 发表于 2003-01-31 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
刚才我对baobolz原来提到的那个FINDRAMD的源代码进行了一番改编,改编成为了FINDCD程序,可以查找光盘所在的盘符,并设置到环境变量CDROM中。它有两个明显的优点:
1:完全支持CLOAKING+MSCDEX,而网上的那个FINDCD.COM 1.02则不支持; 2:可以直接将光盘盘符设到变量CDROM中,操作非常方便,而不用判断任何ERRORLEVEL值。 我已将它传到论坛上来了,下载地址: 打开附件 链接已失效(管理员注 2009-4-28) |
|
| 第7楼 MYS | 发表于 2003-02-06 00:00 |
| 元老会员 发帖 1,637 积分 5,170 来自 广东佛山 | |
|
非常好非常好,这样做启动盘就很方便了。
|
|
| 第8楼 Wengier | 发表于 2003-02-06 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
| 第9楼 nre | 发表于 2003-02-07 00:00 |
| 银牌会员 发帖 361 积分 1,210 | |
|
~ 同时上传原代码吧,有利于大家水平的提高。
|
|
| 第10楼 Wengier | 发表于 2003-02-07 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
好吧,以下是此程序的部分源代码:
程序初始化部分(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. <- 程序结束。 |
|
| 第11楼 pfox | 发表于 2003-02-07 00:00 |
| 银牌会员 发帖 446 积分 1,451 | |
|
是否支持双光驱及三光驱?
|
|
| 第12楼 Wengier | 发表于 2003-02-08 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
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”将显示光驱找不到(因为只有三个光驱)。 |
|
| 第13楼 pfox | 发表于 2003-02-08 00:00 |
| 银牌会员 发帖 446 积分 1,451 | |
|
Good!
Wengier,能否再增强一下,在不加参数运行FindCD后, 直接将第一个CDROM的盘符赋给CDROM环境变量,若存在 第二个、第三个CDROM盘符直接赋给CDROM1、CDROM2? 这样在启动盘里面就可以直接用cda.exe判断光驱里面是否 有盘及是否有存在的文件,若有就可以直接执行或调用。 |
|
| 第14楼 Wengier | 发表于 2003-02-15 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
不如编写个批处理文件来做到,因为若运行FINDCD 0后%CDROM%的值为光驱数目,做个批处理循环并根据光驱数目将所有的光驱字符设置到%CDROM%变量中就可以了。
|
|
| 第15楼 Wengier | 发表于 2003-02-15 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
我刚才编写了个简单的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. |
|
| 1 2 3 4 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |