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

当你的程序以控制台方式运行时,按下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);

时间: 2024-10-26 06:08:38

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

windows中Python程序的安装图文教程

这里我们分享,如何在Windows7 64位系统 平台下安装Python程序 :   第一步:登陆并下载程序 登陆Python官方网站  https:\\www.python.org\ 可以看到有两个版本,这里我选择Python 2.7.9 第二步:安装程序 将下载好的MSI程序,双击程序进行安装,安装到计算机所有用户 选择程序安装路径 c:\python27\下 安装Python功能 查看安装进度 点击Finish完成安装 第三步:配置环境变量 控制面板\所有控制面板项\系统 \高级系统设置\

C# in VS2008从入门到提高Step By Step(三)一个简单的控制台程序

作者:PeterXu  来源:Blog.CSDN  Blog: http://blog.111cn.net/peterreg/版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出版.作者信息和本声明.否则将追究法律责任.本文地址:http://blog.111cn.net/peterreg/archive/2008/04/10/2275206.aspx 接我的上一篇文章<>. 2. Console类及其常用方法    Console类是表示控制台应用程序的标准输入流.输出流和错

c++ mfc visual-visual studio6.0 mfc程序和控制台程序的简单问题,求大神解答

问题描述 visual studio6.0 mfc程序和控制台程序的简单问题,求大神解答 visual c++6.0中控制台程序的main函数应该放在mfc程序的哪个文件中,成员函数放在mfc的哪个文件中.

在VC中隐藏控制台程序窗口的实现代码_C 语言

下面就介绍一下,如何隐藏win32 console application的console窗口因为此种方法是通过设置编译器的链接开关来实现,所以让我们来看一下编译器的链接开关选项(也就是linker选项).首先我们来看一下linker的 /subsystem 选项该选项的语法形式如下: /subsystem:{console|efi_application|efi_boot_service_driver|efi_rom|efi_runtime_driver|native|posix|window

由于工作需要,我使用C#制作了一个控制台程序,定期处理数据库中的一些信息。

问题描述 由于工作需要,我使用C#制作了一个控制台程序,定期处理数据库中的一些信息.以前一切正常,即便是出现错误也会有错误提示.但是最近出现了奇怪的问题,偶尔会莫名其妙的终止程序,没有任何的提示.请高手指导一下,为什么会出现这样的问题,如果有错误,如何能够显示出来? 解决方案 解决方案二:这种东西没有日志,你都猜不着别人怎么猜解决方案三:你把运行的一些操作写到LOG文件吧,以便观察出了什么错误解决方案四:多加一些trycatch,这样程序出错就不会退出而会弹出错误消息.另外要在程序中记录日志,程

编写自己的IDE:如何在图形界面中实时捕获控制台程序的标准输出

编写自己的"IDE"-- 如何在图形界面中实时捕获控制台程序的标准输出. IDE是集成开发环境(Integrated Development Environment)的简称.印象里有很多出色的IDE,比如JBuilder和Kylix,比如Visual Studio.不知大家是否留意过,大多数IDE本身只提供代码编辑.工程管理等人机交互功能,我们在IDE中编译代码.调试程序时,IDE需要调用命令行的编译器.调试器完成相应的操作.例如,使用Visual Studio编译C++程序时,我们会

在win7系统中运行程序提示应用程序或dll为无效的windows

  咱们日常在操作Windows系统的时候,总是离不开要运行程序.例如咱们经常需要使用到的一些工具,什么杀毒软件,什么QQ聊天软件,什么IE浏览器,什么360软件等等,这些其实都是咱们Windows系统中的程序,所以在Windows系统中运行程序,是每次操作电脑都无法避免的.但是最近,却有使用w764旗舰版系统下载电脑的用户咨询说,自己在使用win7旗舰版系统运行程序时,收到了"应用程序或dll为无效的windows映像"的提示,那么遇到这样的情况,咱们要如何解决呢?下面,小编就来详细

求大神指教-在c++控制台程序中读取文本文件

问题描述 在c++控制台程序中读取文本文件 我是新手,刚刚入门,学校安排了一个暑期项目,做一个球员信息管理系统. 把数据存储在txt文件中,怎样才可以有序的读取我要找的数据,包括球员的赛季数据个个人信息.... 解决方案 C++读取文本文件 解决方案二: 那要看你是怎么存储的数据,什么顺序存储的就怎么读.可以一个球员的信息占一行,或者xxx个字节.然后一个一个球员的读出来. 解决方案三: 最简单的,可以用json文件等来存取,这样用jsoncpp等可以方便读取,解析数据. 解决方案四: 先定义一

windows窗体应用程序-关于c++控件编程往控件中写入文本的问题

问题描述 关于c++控件编程往控件中写入文本的问题 首先我采用vs2010建立了一个windows窗体应用程序,在这个窗体上面加了一个richtextbox控件和一个button控件,我的目的是程序执行时,点击button按钮,这样在richtextbox控件中会显示相应的数据,于是我在button中添加了如下代码: private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { int i,