Windows中控制台程式的全螢幕模式開關

來源:互聯網
上載者:User

當你的程式以控制台方式運行時,按下ALT+ENTER可以將螢幕變成全螢幕模式。但如何在程式中用Win32 API函數來實現這個功能呢?據我所知,微軟沒有提供有關這方面的任何文檔。但是,當使用者按下ALT+ENTER時,Windows 9x用如下特殊的加速鍵ID發送WM_COMMAND訊息到控制台視窗。

#define ID_SWITCH_CONSOLEMODE 0xE00F

這個加速鍵ID沒有對外公開,所以你在Win32 API的有關文檔中找不到關於ID_SWITCH_CONSOLEMODE的內容。

為了在普通視窗和全螢幕模式之間來迴轉換,可以象下面這樣用SendMessage函數。

SendMessage(hWnd,WM_COMMAND,ID_SWITCH_CONSOLEMODE,0);

Windows NT/2000與Windows 9x中控制台程式的全螢幕模式開關處理方法是不一樣的。不能通用。在Windows NT/2000中要使用兩個未公開的Win32 API函數來存取控制台視窗。這兩個函數是:

BOOL SetConsoleDisplayMode (
HANDLE hOut,       // 標準輸出控制代碼
DWORD dwNewMode,    // 指定顯示模式
LPDWORD lpdwOldMode, // 用於前一個顯示模式值的變數地址
);
BOOL GetConsoleDisplayMode (
LPDWORD lpdwMode, //用於當前顯示模式值的變數地址
);

這兩個函數從Kernel32.dll中輸出,但是Kernel32.lib中沒有列出它們。所以我們要用GetProcAddress函數動態載入。方法如下:

typedef BOOL (WINAPI *PROCSETCONSOLEDISPLAYMODE)(HANDLE,DWORD,LPDWORD);
typedef BOOL (WINAPI *PROCGETCONSOLEDISPLAYMODE)(LPDWORD);
PROCSETCONSOLEDISPLAYMODE SetConsoleDisplayMode;
PROCGETCONSOLEDISPLAYMODE GetConsoleDisplayMode;
HMODULE hKernel32 = GetModuleHandle("kernel32");
SetConsoleDisplayMode = (PROCSETCONSOLEDISPLAYMODEELLWND)
GetProcAddress(hKernel32,"SetConsoleDisplayMode"); 
GetConsoleDisplayModeplayMode = (PROCGETCONSOLEDISPLAYMODE)
GetProcAddress(hKernel32,"GetConsoleDisplayMode"); 
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwOldMode;
SetConsoleDisplayMode(hOut,1,&dwOldMode);

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.