Windows中控制台程序的全屏模式开关

2016-02-19 13:05 34 1 收藏

有了下面这个Windows中控制台程序的全屏模式开关教程,不懂Windows中控制台程序的全屏模式开关的也能装懂了,赶紧get起来装逼一下吧!

【 tulaoshi.com - 编程语言 】

    当你的程序以控制台方式运行时,按下ALT+ENTER可以将屏幕变成全屏模式。但如何在程序中用Win32 API函数来实现这个功能呢?据我所知,微软没有提供有关这方面的任何文档。但是,当用户按下ALT+ENTER时,Windows 9x用如下非凡的加速键ID发送WM_COMMAND消息到控制台窗口。
  
  #define ID_SW99vCH_CONSOLEMODE 0xE00F
  
  这个加速键ID没有对外公开,所以你在Win32 API的有关文档中找不到关于ID_SW99vCH_CONSOLEMODE的内容。
  为了在普通窗口和全屏模式之间往返转换,可以象下面这样用SendMessage函数。
  
  SendMessage(hWnd,WM_COMMAND,ID_SW99vCH_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);

来源:http://www.tulaoshi.com/n/20160219/1602943.html

延伸阅读
标签: windows 操作系统
  文/小新 笔者的操作系统是Windows XP,有一天突然发现在运行一些管理程序的时候,系统提示说MMC不能打开文件,说是这个文件可能不存在,或者是没有访问此文件的足够权限。这是以前从来没有遇到的情况,是怎么回事呢?系统提示文件不存在,但实际文件却是好好的;系统提示没有足够权限,但笔者的用户是管理员账号,权限是最高...
《辐射3》控制台-技能代码 格式: 在控制台(按 ~ 键进入控制台)中输入 新加技能:player.addperk [HEXCODE] 移除技能:player.removeperk [HEXCODE]   [HEXCODE] 代码如下表所示(不用输入0,Quest Perk表示接任务完成后才会取得的技能)   QUOTE: Perks   Admantium Skeleton   00094EC4 Action Boy  &...
《辐射3》控制台-瞬移代码 控制台-瞬移代码   格式: coc LocationID 将您传送到LocationID位址   QUOTE: LocationID Location ID                Location Name --------------------------------------------------------------------- AgathasHou...
标签: 服务器
OSS控制台都有什么功能   OSS控制台分为BUCKET管理、与Object管理两大模块。 1、BUCKET管理: 可通过BUCKET管理模块,实现BUCKET创建、删除、设置读写权限及防盗链设置等操作。 1.1创建BUCKET: 1.1.1 点击绿色创建BUCKET按钮即可进行创建。 1.1.2 一个OSS帐号最多可创建10个BUCKET。 1.1.3 每个...
《辐射:新维加斯》控制台代码 0.打开控制台的方法:在游戏里按"~"开启控制台,输入完后按回车,再按"~"关闭即可 1.实用控制台代码和作用解析:【不区分大小写】 注意:之前如果输入过某个代码,并按回车启动后,再次使用只需按~,再按方向键的【↑】即可调出。下文大量运用此技巧! 小发现:刚才不小心加了一个【食...

经验教程

104

收藏

21
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部