天天看點

隐藏控制台應用程式的視窗

原址:http://www.cnblogs.com/kex1n/archive/2011/04/10/2011254.html

衆所周知,控制台應用程式一般都會顯示一個控制台視窗(虛拟DOS視窗),但很多時候控制台程式的執行邏輯根本不需要與使用者進行互動,是以顯示這個難看的視窗純屬多餘,那麼如何将它屏蔽掉呢?下面我向大家介紹一種方法。

  作業系統裝載應用程式後,做完初始化工作就轉到程式的入口點執行。程式的預設入口點實際上是由連接配接程式設定的,不同的連接配接器選擇的入口函數也不盡相 同。在VC下,連接配接器對控制台程式設定的入口函數是 mainCRTStartup,mainCRTStartup 再調用你自己編寫的 main 函數;對圖形使用者界面(GUI)程式設定的入口函數是 WinMainCRTStartup,WinMainCRTStartup 調用你自己寫的 WinMain 函數。

具體設定哪個入口點是由連接配接器的“/subsystem:”選項參數确定的,它告訴作業系統如何運作編譯生成的.EXE檔案。可以指定四種方 式:“CONSOLE|WINDOWS|NATIVE|POSIX”如果這個選項參數的值為“WINDOWS”,則表示該應用程式運作時不需要控制台,有 關連接配接器參數選項的詳細說明請參考 MSDN 庫。

下面我們将通過預編譯指令來對編譯器和連接配接器進行設定,進而達到我們的目的:例子代碼運作後播放Windows系統啟動聲音三次,然後退出,運作後不會顯示控制台視窗。

#include <windows.h>

#include <mmsystem.h>

#pragma comment(lib,"winmm.lib") // 告訴連接配接器與這個庫連接配接,因為我們要播放多媒體聲音

#pragma comment(linker, "/subsystem:windows /ENTRY:mainCRTStartup")  // 設定連接配接器選項

int main(void)

{

   PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);

   Sleep(50);

   PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);

   Sleep(50);

   PlaySound("SystemStart",NULL, SND_ALIAS|SND_SYNC);

   Sleep(50);

   return 0;

}

在 IDE 環境中建立一個空的控制台程式,将上述代碼添加到工程中,編譯運作

繼續閱讀