中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-01 18:37
48,037 主题排行 / 350,122 发帖 / 今日 2 篇 / 48,249 会员排行
DOS开发编程 & 发展交流 (开发室) » [求助]QB,如何知道程序是在纯DOS下还是在WINDOWS下运行
可打印版本  1,318 / 7
第1楼 Chearv 发表于 2006-11-23 09:24
初级用户 发帖 15 积分 36
[求助]QB,如何知道程序是在纯DOS下还是在WINDOWS下运行
 如题,希望朋友能够提供示范程序. 先谢谢大家了。
第2楼 Chearv 发表于 2006-11-24 06:27
初级用户 发帖 15 积分 36
我记得像GHOST,PQ这类软件在WINDOWS下运行都会有不能在WINDOWS下运行的提示,那编程的时候是如何知道程序是不是在纯DOS下运行呢?是不是要用到汇编啊?
第3楼 qingteng1983 发表于 2006-11-24 08:59
新手上路 发帖 2 积分 6
那要看你是在什么样的环境中编程了吧?EXE文件的头部有个标识符,告诉操作系统,这个程序的运行环境。可以用文本编辑器打开exe看一看。dos下的EXE文件头部有这样的标识:MZ,然后后面有这样的句子"This program cannot be run in DOS mod"
这就是PE文件的头部吧。
第4楼 Chearv 发表于 2006-11-24 22:55
初级用户 发帖 15 积分 36
楼上的朋友非常热心,先谢过了。 不过我想要得到的信息正好相反,我要写一个纯DOS程序,使它能保证是在纯DOS环境下而不是WINDOWS的NTVDM中运行。
第5楼 Chearv 发表于 2006-11-24 23:34
初级用户 发帖 15 积分 36
自己找到答案了.

当 Windows 运行程序, 它提供名为 " windir " 环境变量, 指定是安装 Windows 目录的完整路径。 注意此环境变量名称拼写是否用小写字母。

如果是在 MicrosoftWindows, 运行 Basic 程序 ENVIRON$("windir") 表达式返回一个非空字符串, 否则返回空字符串。
回到顶端

示例代码
IF ENVIRON$("windir") <> "" THEN
PRINT "running under Windows"
ELSE
PRINT "not running under Windows"
END IF
第6楼 happybasic 发表于 2006-11-28 00:55
中级用户 发帖 118 积分 298
Good!
第7楼 electronixtar 发表于 2006-11-28 00:59
铂金会员 发帖 2,672 积分 7,493
学习!
第8楼 spoton 发表于 2006-11-29 02:22
初级用户 发帖 25 积分 54 来自 疯人院
google 到鬼方法,smsw 由于还是 privileged instruction,感觉上由 emulator 决定给不给读

http://www.osdev.org/osfaq2/index.php/What%20is%20v8086%20mode%3F

http://www.sandpile.org/post/msgs/20000745.htm


How do i detect v8086 ?

EFLAGS.VM is NEVER pushed onto the stack if the V86 task uses PUSHFD. You should check if CR0.PE=1 and then assume it's V86 if that bit is set.

detect_v86:
smsw ax
and eax,1 ;CR0.PE bit
ret

[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023