我有一個用windows子系統創建的.exe。我該.exe文件複製到另一個.exe和我運行:以編程方式檢查子系統
editbin.exe /SUBSYSTEM:CONSOLE my.exe
所以我的目的是爲了有一個GUI運行.exe文件,這是爲命令行操作另一個.exe文件(無GUI )。
如何檢查我的C++代碼中當前有哪些子系統處於活動狀態?
我有一個用windows子系統創建的.exe。我該.exe文件複製到另一個.exe和我運行:以編程方式檢查子系統
editbin.exe /SUBSYSTEM:CONSOLE my.exe
所以我的目的是爲了有一個GUI運行.exe文件,這是爲命令行操作另一個.exe文件(無GUI )。
如何檢查我的C++代碼中當前有哪些子系統處於活動狀態?
子系統類型(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項:
看在Imagehlp庫ImageLoad功能。這將返回一個LOADED_IMAGE結構,該結構在其FileHeader字段中有一個IMAGE_NT_HEADERS結構。此結構中的OptionalHeader字段是一個IMAGE_OPTIONAL_HEADER,它具有一個包含所需信息的Subsytem字段。
比你自己的標題中的spelunking容易得多:檢查你是否有控制檯句柄。 對於GUI子系統應用程序,GetStdHandle()
將返回NULL
句柄。
這很好,thx! – 2009-09-18 16:18:36