Windows Console 控制檯、窗口界面切換

衆所周知,控制檯應用程序一般都會顯示一個控制檯窗口(虛擬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 環境中新建一個空的控制檯程序,將上述代碼添加到工程中,編譯運行。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章