标题: [求助]QB,如何知道程序是在纯DOS下还是在WINDOWS下运行
[打印本页]
作者: Chearv
时间: 2006-11-23 09:24
标题: [求助]QB,如何知道程序是在纯DOS下还是在WINDOWS下运行
如题,希望朋友能够提供示范程序. 先谢谢大家了。
作者: Chearv
时间: 2006-11-24 06:27
我记得像GHOST,PQ这类软件在WINDOWS下运行都会有不能在WINDOWS下运行的提示,那编程的时候是如何知道程序是不是在纯DOS下运行呢?是不是要用到汇编啊?
作者: qingteng1983
时间: 2006-11-24 08:59
那要看你是在什么样的环境中编程了吧?EXE文件的头部有个标识符,告诉操作系统,这个程序的运行环境。可以用文本编辑器打开exe看一看。dos下的EXE文件头部有这样的标识:MZ,然后后面有这样的句子"This program cannot be run in DOS mod"
这就是PE文件的头部吧。
作者: Chearv
时间: 2006-11-24 22:55
楼上的朋友非常热心,先谢过了。 不过我想要得到的信息正好相反,我要写一个纯DOS程序,使它能保证是在纯DOS环境下而不是WINDOWS的NTVDM中运行。
作者: Chearv
时间: 2006-11-24 23:34
自己找到答案了.
当 Windows 运行程序, 它提供名为 " windir " 环境变量, 指定是安装 Windows 目录的完整路径。 注意此环境变量名称拼写是否用小写字母。
如果是在 MicrosoftWindows, 运行 Basic 程序 ENVIRON$("windir") 表达式返回一个非空字符串, 否则返回空字符串。
回到顶端
示例代码
IF ENVIRON$("windir") <> "" THEN
PRINT "running under Windows"
ELSE
PRINT "not running under Windows"
END IF
作者: happybasic
时间: 2006-11-28 00:55
Good!
作者: electronixtar
时间: 2006-11-28 00:59
学习!
作者: spoton
时间: 2006-11-29 02:22
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 Quote: |
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 |
|