当前位置:  开发笔记 > 后端 > 正文

Windows和控制台应用程序之间的区别

如何解决《Windows和控制台应用程序之间的区别》经验,为你挑选了2个好方法。

Windows和控制台应用程序之间有什么区别?

在Visual C++中创建新项目时,它要求选择上述任一项.



1> Konrad Rudol..:

唯一的区别是控制台应用程序总是会生成一个控制台,如果它没有从一个控制台启动(或者控制台在启动时被主动抑制).另一方面,Windows应用程序不会生成控制台.它仍然可以连接到一个existant控制台或使用创建一个新的控制台AllocConsole.

这使得Windows应用程序更适合GUI应用程序或后台应用程序,因为您通常不希望为这些应用程序创建终端窗口.

从更技术性的角度来看,Console和Windows可执行文件之间的唯一区别是文件的PE头中的一个字节exe.手动切换此字节(例如,使用十六进制编辑器)可转换应用程序类型.这是一个发布良好的hack,用于在VB6中创建控制台应用程序(此类应用程序未明确支持).

要确定和更改应用程序的子系统类型,您需要读取PE标头的部分内容.但子系统数据的地址并不固定,因为它是可选文件头的一部分,其位置由存储在DOS文件头(在成员中e_lfanew)的地址确定.该地址实际上指向_IMAGE_NT_HEADERS记录,而记录又包括IMAGE_OPTIONAL_HEADER32结构.这有int161)成员叫Subsystem.Windows应用程序的成员值为2,控制台应用程序的值为3.存在其他子系统(特别是POSIX和内核).我编写了一个小的VB6应用程序来更改应用程序的子系统,可以从ActiveVB下载源代码.

PE格式没有很好的文档记录,但本文档可作为介绍:PE内部对等:Win32可移植可执行文件格式之旅.


1)这与我只声称只有一个字节不同的说法并不矛盾:该成员的最高有效字节始终为0.只有最低有效字节才会发生变化.



2> oefe..:

除了Konrad提到的差异之外,从命令提示符以交互方式调用时,控制台和Windows应用程序的行为也不同:

启动控制台应用程序时,在控制台应用程序退出之前,命令提示符不会返回.当您启动Windows应用程序时,该命令立即返回.

批处理文件不是这样; 他们将一直等到应用程序退出.(您始终可以使用该start命令启动应用程序而无需等待.)

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有