2009-09-17 116 views
2

我有一個用windows子系統創建的.exe。我該.exe文件複製到另一個.exe和我運行:以編程方式檢查子系統

editbin.exe /SUBSYSTEM:CONSOLE my.exe 

所以我的目的是爲了有一個GUI運行.exe文件,這是爲命令行操作另一個.exe文件(無GUI )。

如何檢查我的C++代碼中當前有哪些子系統處於活動狀態?

回答

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. 
} 

培訓相關MSDN項:

ImageNtHeader IMAGE_NT_HEADERS IMAGE_OPTIONAL_HEADER

+0

這很好,thx! – 2009-09-18 16:18:36

1

比你自己的標題中的spelunking容易得多:檢查你是否有控制檯句柄。 對於GUI子系統應用程序,GetStdHandle()將返回NULL句柄。

相關問題