Windows Console 控制檯、視窗介面切換

Sunday發表於2014-11-13
眾所周知,控制檯應用程式一般都會顯示一個控制檯視窗(虛擬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 環境中新建一個空的控制檯程式,將上述程式碼新增到工程中,編譯執行。

相關文章