2009年5月19日 星期二

如何隱藏win32 console application的console視窗

此種方法是利用設定編譯器的鏈結開關來實現, 所以讓我們來看一下Linker選項, 如下圖所示



這個Linker選項是告訴作業系統如何運作執行檔,
如果我們建立一個Win32 console application的話,
Linker/subsystem選項應該為Console.

我們知道用VC編寫的程式, 執行的時候是需要 C\C++執行庫支援的.
當我們執行一個C/C++程式的時候, 鏈結器會首先尋找應用程式的啟動函數.


如果你建立了一個console程式的話, Linker的鏈結開關會是下面這種形式
/subsystem:"console" /entry:"mainCRTStartup" (ANSI)
/subsystem:"console" /entry:"wmainCRTStartuup" (UNICODE)


在default情況下/subsystem/entry開關是對應的,也就是:
console 對應 mainCRTStartupwmainCRTStartup
windows 對應 WinMain或者wWinMain

但是我們也可以通過手動的方式使他們不對應,
在default情況下Linker看到/subsystem下是windows選項的時候,
它會自動尋找WinMain或者wWinMain, 但我們強制指定入口位址,
這樣執行程式的時候console視窗就會隱藏!

如下面程式碼所示:

#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" ) // 設置入口位址
int main(int argc, char* argv[])

{

return 0;
}

參考網址: http://forum.icst.org.tw/phpbb/viewtopic.php?f=44&t=7609&start=0

沒有留言:

張貼留言