用戶按 Alt+Enter 切換全屏時,Windows 9x 向控制台窗口發送 WM_COMMAND 消息,wParam 為未公開常量 ID_SWITCH_CONSOLEMODE (0xE00F)。可直接模擬此消息實現切換:
#define ID_SWITCH_CONSOLEMODE 0xE00F
SendMessage(hWnd, WM_COMMAND, ID_SWITCH_CONSOLEMODE, 0);
NT 內核不支持上述消息,需動態調用 Kernel32.dll 內兩個未導出函數:
BOOL SetConsoleDisplayMode(HANDLE hOut, DWORD dwNewMode, LPDWORD lpdwOldMode);
BOOL GetConsoleDisplayMode(LPDWORD lpdwMode);
typedef BOOL (WINAPI *PFN_SET)(HANDLE, DWORD, LPDWORD);
typedef BOOL (WINAPI *PFN_GET)(LPDWORD);
HMODULE hKernel32 = GetModuleHandle("kernel32");
PFN_SET SetConsoleDisplayMode = (PFN_SET)GetProcAddress(hKernel32, "SetConsoleDisplayMode");
PFN_GET GetConsoleDisplayMode = (PFN_GET)GetProcAddress(hKernel32, "GetConsoleDisplayMode");
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwOldMode;
SetConsoleDisplayMode(hOut, 1, &dwOldMode); // 1 = 全屏模式
注意:dwNewMode 取 1 進入全屏,0 返回窗口模式。此法僅適用 NT 內核系列(NT/2000/XP/後續版本)。