- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
附录A 控制台程序
在Windows操作系统中运行一个应用程序后,我们经常会看到两种界面,一种是标准的窗口界面,窗口界面的程序架构在第4章中已经有了详细的介绍;另一种是类似于MS-DOS程序的文本界面,如常用的Ping、Xcopy等命令使用的都是这种界面,这种界面就叫做控制台(Console),由于控制台在Windows系统中还是以一个文本窗口的方式出现的,所以一般将这个窗口称为控制台窗口。
从表面看,32位的控制台程序和16位的MS-DOS应用程序在外观和表现上都是很相似的,比如它们都是在一个黑洞洞的文本窗口中显示文本,都支持命令行下的重定向操作,读取键盘的方式也是一样的。但是,在这个表象下面,两者却是完完全全不同的,DOS应用程序是16位的实模式程序,而Windows下的控制台程序却是不折不扣的32位保护模式程序,它可以使用Win32 API函数,文件头中同样有导入表和导出表,可以在程序中建立多个线程执行。总之,控制台程序是长着“DOS程序面孔”的Win32程序,可以使用Win32编程中的所有特征。
进一步来说,如果一定要让控制台程序有一个窗口的话,也可以在其中使用CreateWindow函数来创建一个窗口,这样控制台程序可以在使用终端界面输入输出的同时使用窗口上的菜单来操作(但估计没有人会做这样的事情)。
控制台程序最主要的用途是用于网络的远程维护。进行远程维护时一般使用Telnet等工具登录到远程主机并在上面执行命令,如果执行的是图形界面的程序,这个界面是无法远程操作的,所以我们可以发现Windows中用于网络的命令大多数是控制台界面的,如Ping,Netstat,Tracert,Arp,Route,Ipconfig和Finger等,与此相比,很难想像类似于Office这样的软件会用在远程操作中。
作为对第4章中窗口模式的补充,本节中将简单介绍控制台程序和窗口程序的区别,以及控制台程序的写法。
A.1 控制台程序和窗口程序的区别
除了和界面相关的代码有所不同外,控制台程序和窗口程序的区别还在于链接的时候指定参数的不同,读者一定还记得LINK程序有个subsystem参数,当这个参数指定为Windows的时候,链接器生成的是窗口程序,本书中绝大部分以窗口为界面的例子程序中,LINK语句是这样写的:
Link /subsystem:windows Test.obj Test.res
将subsystem参数改为console的时候,LINK程序产生的就是控制台文件:
Link /subsystem:console Test.obj Test.res
两种参数生成的可执行文件的不同表现在文件头中,可执行文件(PE文件)的文件头中有个IMAGE_OPTIONAL_HEADER32结构,结构中的Subsystem字段就记录了文件类型的不同,读者可以在第17章的17.1.3小节中看到对文件头的详细分析。
运行文件时,操作系统会检查文件头中的Subsystem参数,如果发现参数的类型是窗口文件,那么将文件以正常的方式运行;如果发现参数的类型是控制台文件,那么操作系统将为程序创建一个控制台窗口(即类似于DOS窗口的这个文本窗口),然后运行文件。
另外,当一个控制台程序是被另一个控制台程序作为子进程运行的时候,系统不会为它创建新的控制台窗口,而是将父进程的窗口指定给它,所以在“我的电脑”中双击运行一个控制台程序的时候,会出现一个新的控制台窗口,而在“命令提示符”窗口中用命令行参数运行一个控制台程序的时候,程序会直接使用“命令提示符”的窗口。
我们可以用几个简单的实验来验证这一点。首先打开“命令提示符”,进入第4章例子程序的目录Chapter04\FirstWindow(这是一个普通的窗口程序而不是控制台程序),在命令行下输入FirstWindow来运行程序,程序运行后窗口出现了,但是不必等到窗口关闭,“命令提示符”就会直接回到等待输入命令的状态,也就是说,普通的窗口程序并不会占用父进程的控制台窗口。
现在修改Chapter04\FirstWindow目录中的makefile文件,将LINK命令的参数改成/subsystem:console,然后用nmake /a重新编译,这样程序的代码没有任何变化,仅仅是它的文件类型变成了控制台程序而已。
重复上面的步骤,在命令行下运行FirstWindow程序,可以看到,程序运行后窗口出现了,但是“命令提示符”处于等待状态,只有关闭窗口FirstWindow程序,“命令提示符”中才会回到等待输入的状态,这说明控制台程序的父进程如果也是控制台程序的时候,程序将继承父进程的控制台窗口。
现在在“程序管理器”中通过双击FirstWindow.exe文件来运行,一个正常窗口出现的同时也出现了一个新的文
您可能关注的文档
- 组态王产品与应用介绍.ppt
- 2012年1月自考数据库与其应用试题.doc
- 轨道电路分路不良(教案)1附件.ppt
- 数据仓库与数据挖掘(CH6).pdf
- 第五章 CryEngine3完全学习手册上.pdf
- 电厂调试范围与项目.doc
- 第七章 CAD 复制类命令有那几种.doc
- 第九章 classGDALDataset.doc
- 通风空调专业调试方案概要.doc
- 电脑全套快捷键小技巧幻灯片.doc
- 12习主席出席APEC领导人非正式会议-2023中考地理时政热点汇编.docx
- 押广东中考第2130题世界史.docx
- 培优专题03几何最值类问题综合.docx
- 2018-2019学年高中历史专题2近代中国资本主义的曲折发展专题检测卷人民版必修2.doc
- Unit6Meetmyfamily!PartBLet’slearnLet’splay(课件)人教PEP版英语四年级上册2.pptx
- Unit1FoodforthoughtUsinglanguage语法课件高中英语.pptx
- (培优特训)专项6.2反比例函数与k值几何意义高分必刷题(原卷版).docx
- 第2课西方国家古代和近代政治制度的演变-高二历史课件(选择性必修1国家制度与社会治理).pptx
- 2018-2019学年高中化学学业分层测评9离子键配位键与金属键选修3.doc
- 江西省信丰中学高三上学期期末模拟考历史试题.doc
最近下载
- 2024年工商银行人工智能大模型白皮书.pdf
- 提质增效施工组织设计.docx
- 2024年下半年北京夏都妫川人力资源有限公司招聘食品药品安全监察员12人笔试备考试题及答案解析.docx
- 2023年中国石油大学(北京)克拉玛依校区数据科学与大数据技术专业《计算机网络》科目期末试卷B(有答案).docx VIP
- 2024新人教版一年级数学上册综合与实践单元数学游戏单元整体教学设计.pdf VIP
- 教师资格考试结构化面试100题(含答案).pdf
- JG-D02 环境监测仪技术规范书.doc
- 班组安全活动记录表.pdf
- 大数据技术在继电保护领域的研究与应用-电力信息与通信技术.pdf VIP
- 重庆市某办公楼土建工程施工图预算编制.docx
文档评论(0)