屏蔽控制台應用程式的視窗#pragma comment(linker, “/subsystem:windows /ENTRY:mainCRTStartup”)

來源:互聯網
上載者:User
眾所周知,控制台應用程式一般都會顯示一個控制台視窗(虛擬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 環境中建立一個空的控制台程式,將上述代碼添加到工程中,編譯運行。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.