C++ 以编程方式检查子系统

C++ 以编程方式检查子系统,c++,windows,C++,Windows,我使用windows子系统创建了一个.exe。我将该.exe复制到另一个.exe,然后运行: editbin.exe /SUBSYSTEM:CONSOLE my.exe 因此,我的目的是让一个.exe与GUI一起运行,另一个.exe用于命令行操作(无GUI) < >我如何检查我的C++代码中当前子系统是什么?< /P> < P>子系统类型(GUI,控制台等)被存储在PE头中,通过IMAGE函数可以访问。您可以使用以下代码获得它: // Retrieve the header for the e

我使用windows子系统创建了一个.exe。我将该.exe复制到另一个.exe,然后运行:

editbin.exe /SUBSYSTEM:CONSOLE my.exe
因此,我的目的是让一个.exe与GUI一起运行,另一个.exe用于命令行操作(无GUI)

< >我如何检查我的C++代码中当前子系统是什么?< /P> < P>子系统类型(GUI,控制台等)被存储在PE头中,通过IMAGE函数可以访问。您可以使用以下代码获得它:

// Retrieve the header for the exe.  GetModuleHandle(NULL) returns base address
// of exe.
PIMAGE_NT_HEADERS header = ImageNtHeader((PVOID)GetModuleHandle(NULL));
if (header->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI)
{
    // Console application.
}
相关MSDN条目:


查看Imagehlp库中的函数。这将返回一个在其FileHeader字段中具有结构的结构。此结构中的OptionalHeader字段是一个包含所需信息的子系统字段。

比在自己的标题中挖掘要容易得多:检查是否有控制台句柄。 对于GUI子系统应用程序,
GetStdHandle()
将返回
NULL
句柄