以编程方式检查子系统

Mic*_*ley 2 c++ windows

我有一个用Windows子系统创建的.exe.我将.exe复制到另一个.exe,然后运行:

editbin.exe /SUBSYSTEM:CONSOLE my.exe
Run Code Online (Sandbox Code Playgroud)

所以我的目的是使用一个运行GUI的.exe,另一个运行命令行操作的.exe(无GUI).

如何在C++代码中检查当前活动的子系统?

Mic*_*ael 8

子系统类型(GUI,控制台等)存储在PE头中,您可以通过ImageHlp函数访问它.您可以使用以下代码获取它:

// 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.
}
Run Code Online (Sandbox Code Playgroud)

相关MSDN条目:

ImageNtHeader IMAGE_NT_HEADERS IMAGE_OPTIONAL_HEADER