首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows 控制台程式全屏模式程式化切換技術

     編輯:關於C++

核心發現:未公開的加速鍵 ID

用戶按 Alt+Enter 切換全屏時,Windows 9x 向控制台窗口發送 WM_COMMAND 消息,wParam 為未公開常量 ID_SWITCH_CONSOLEMODE (0xE00F)。可直接模擬此消息實現切換:

#define ID_SWITCH_CONSOLEMODE 0xE00F
SendMessage(hWnd, WM_COMMAND, ID_SWITCH_CONSOLEMODE, 0);

Windows NT/2000 專用 API 方案

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/後續版本)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved