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

2016-02-19 13:05 28 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);

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

延伸阅读
标签: windows 操作系统
本人的一台操作系统为Win2000 Server的笔记本电脑最近被感染了病毒,我首先用相关杀毒软件来扫描计算机,扫描报告如下: 病毒名称:Hacktool 文件名:c:\winnt\system32\ntservice.exe 操作:删除失败,隔离失败,访问被拒绝 如何才能彻底删除呢? 因为c:\winnt\system32\ntservice.exe已经在运行了,直接...
标签: 电脑入门
历代Windows系统都集成了一个名为Windows控制台的功能,它是干什么的呢?Windows控制台全称为Microsoft管理控制台,简称为MMC,是所有管理工具的底层统一平台。我们来看看Win10下如何打开Windows控制台。 Windows控制台程序文件默认位于‪C:\Windows\System32目录下,名称为mmc.exe,通过它用户可以创建、保存或打开管理工具来管理硬...
标签: 服务器
OSS控制台都有什么功能   OSS控制台分为BUCKET管理、与Object管理两大模块。 1、BUCKET管理: 可通过BUCKET管理模块,实现BUCKET创建、删除、设置读写权限及防盗链设置等操作。 1.1创建BUCKET: 1.1.1 点击绿色创建BUCKET按钮即可进行创建。 1.1.2 一个OSS帐号最多可创建10个BUCKET。 1.1.3 每个...
标签: windows 操作系统
    当Windows 2000/XP/2003出现了启动故障,而且在安全模式或其他模式下都启动无效时,很多朋友首先想到的就是重装系统。其实不必。这时我们首先应该考虑使用Windows的“故障恢复控制台”来挽救系统,它主要可用来修复系统、禁用或启用服务、格式化磁盘、执行一些管理任务。本期将重点介绍一下利用故障恢复控制台解决一些问题...
《辐射3》控制台-技能代码 格式: 在控制台(按 ~ 键进入控制台)中输入 新加技能:player.addperk [HEXCODE] 移除技能:player.removeperk [HEXCODE]   [HEXCODE] 代码如下表所示(不用输入0,Quest Perk表示接任务完成后才会取得的技能)   QUOTE: Perks   Admantium Skeleton   00094EC4 Action Boy  &...

经验教程

794

收藏

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