一 控制台程序处理Windows消息

#include <stdio.h>
#include <windows.h>BOOL WINAPI ConsoleHandler(DWORD CEvent)
{char mesg[128];switch(CEvent){case CTRL_C_EVENT:MessageBox(NULL,"CTRL+C received!","CEvent",MB_OK);break;case CTRL_BREAK_EVENT:MessageBox(NULL,"CTRL+BREAK received!","CEvent",MB_OK);break;case CTRL_CLOSE_EVENT:MessageBox(NULL,"Program being closed!","CEvent",MB_OK);break;case CTRL_LOGOFF_EVENT:MessageBox(NULL,"User is logging off!","CEvent",MB_OK);break;case CTRL_SHUTDOWN_EVENT:MessageBox(NULL,"User is logging off!","CEvent",MB_OK);break;}return TRUE;
}int main(int argc, char* argv[])
{MSG msg;if (SetConsoleCtrlHandler((PHANDLER_ROUTINE)ConsoleHandler,TRUE)==FALSE){printf("Unable to install handler!\n");return -1;}while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}return 0;
}

首先要安装一个事件钩子,也就是说要建立一个回调函数;ConsoleHandler是回调函数;
然后安装钩子,使用SetConsoleCtrlHandler;

控制台发出了什么消息,有下列值:

CTRL_C_EVENT - 当用户按下了CTRL+C,或者由GenerateConsoleCtrlEvent API发出. 
CTRL_BREAK_EVENT - 用户按下CTRL+BREAK, 或者由GenerateConsoleCtrlEvent API发出.
CTRL_CLOSE_EVENT - 当试图关闭控制台程序,系统发送关闭消息。
CTRL_LOGOFF_EVENT - 用户退出时,但是不能决定是哪个用户. 
CTRL_SHUTDOWN_EVENT - 当系统被关闭时.

参阅
https://www.cnblogs.com/meihao1989/p/3699050.html

注意要在控制台程序中加入GetMessage、TranslateMessage、DispatchMessage的消息循环才行;

按下Ctrl-C提示;

点窗口关闭按钮提示;

二 控制台处理按键消息

#include <windows.h>
#include <stdio.h>#define WH_KEYBOARD_LL 13HHOOK g_Hook;LRESULT CALLBACK KeyboardProc(int code,WPARAM w,LPARAM l)
{if(w == WM_KEYDOWN)printf("按下按键\n");else if(w == WM_KEYUP)printf("释放按键\n");return CallNextHookEx(g_Hook,code,w,l);
}int main()
{MSG msg;g_Hook = SetWindowsHookEx(WH_KEYBOARD_LL,KeyboardProc,GetModuleHandle(NULL),0);while(GetMessage(&msg,NULL,0,0)){TranslateMessage(&msg);DispatchMessage(&msg);}UnhookWindowsHookEx(g_Hook);return 0;
}

每有键按下释放,都输出如上内容;

这里有个问题;

SetWindowsHookEx设置键盘钩子;一般第一个参数是WH_KEYBOARD;

但是这里控制台要用WH_KEYBOARD_LL,不然没反应;

WH_KEYBOARD_LL在windows.h里没定义;自己加上#define;

根据资料有;
WH_KEYBOARD和WH_KEYBOARD_LL,这两个都是键盘钩子,
MSDN上面说的是WH_KEYBOARD会在应用程序调用GetMessage 或者 PeekMessage函数并且有键盘消息(按下或者释放)的时候会调用相应的函数进行处理,
WH_KEYBOARD_LL这个类型是只要有键盘输入事件的发生,它都会将键盘消息传给相应函数,
WH_KEYBOARD_LL是底层键盘钩子,来记录计算机上所有的键盘输入。

Windows控制台程序处理消息编程实例二则相关推荐

  1. 【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Windows 控制台程序编译报错 : 已启动生成- 1>------ 已启动生成: 项目: hacktool, 配置: Debug Win3 ...

  2. 【Visual Studio】Visual Studio 2019 创建 Windows 控制台程序 ( 安装 ‘使用 C++ 的桌面开发‘ 组件 | 创建并运行 Windows 控制台程序 )

    文章目录 一.安装 C++ 桌面开发组件 二.创建并运行 Windows 控制台程序 一.安装 C++ 桌面开发组件 打开 Visual Studio Installer , 点击 " 修改 ...

  3. Windows机制下的游戏编程实例一

    稍微接触一下Windows游戏编程基础,虽然不大喜欢游戏,但是为了扩大知识面,为以后的创新与启发打下基础,还是稍微了解一下: 先来看一个实例吧: 这是程序的文件目录: 里面包含背景音乐与背景图像模板 ...

  4. windows机制下的游戏编程实例二

    通过调用DirectX SDK库实现游戏空间的三维化,也就是我们通常玩的网游,鼠标拖着主角到处跑去完成任务(个人觉得这种游戏超无聊).下面先给出效果图: 还是先给出其文件目录吧,从总体把握实例,也是很 ...

  5. 一元二次求解matlab程序,规范MATLAB编程实例——求解一元二次方程

    好的程序应当具有较好的可读性,良好的可读性可以使得编程者和使用者读程序的时候顺畅很多.如果程序编得很混乱,有可能当编程者久隔多日再一次打开程序时,就读不懂原来的程序了. 下面从一个简单的实例出发,说明 ...

  6. Windows控制台程序“选定模式”的问题

    最近用Nodejs写了个代理程序,一直用的好好的,木有问题,今天突然发现不能用了,使用telnet去连代理的端口也能连通,可是服务就是不能正常使用,提示连接超时. 当时猜测是Nodejs的某个地方阻塞 ...

  7. 数控g71编程实例带图_数控程序中g71编程实例

    可选中1个或多个下面的环节词,搜刮相关材料.也可间接点"搜刮材料"搜刮整个问题. 为了满足设想.制造.维修和普及的需要,在输入代码.坐标系统,加工指令.辅助功能及法式格局等方面,国 ...

  8. Windows多线程控制台程序

    学习笔记 Windows多线程控制台程序目的:学习和掌握如何编写Windows多线程控制台程序.通过编写程序,加深对进程和线程关系的理解,掌握多线程程序的执行和编写技巧.设计要求:写一个单进程多线程的 ...

  9. 【转】为控制台窗口建立消息队列

    介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较"生僻"的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进 ...

最新文章

  1. MySQL开发医药管理系统_java Web开发医药后台管理系统mysql版本源代码下载,支持中英文...
  2. 解题报告:SP1043 GSS4 - Can you answer these queries III(GSS线段树八部曲之三)(区间最大连续子段和)
  3. h5+ 获取当前位置 并获取当前天气
  4. 在mysql中创建表的命令行_如何在命令行创建一个MySQL数据库
  5. 动态变量和静态变量的区别,堆和栈的区别
  6. HTML5 Placeholder实现input背景文字提示效果
  7. ASP.NET Core中的内存缓存
  8. dockerfile文件名_Linux云计算教程全套视频合集:Dockerfile详解(一)
  9. 华为:预计6G将于2030年左右投向市场
  10. 3.4K字,让老板对你的模型稳定性不再质疑
  11. 苹果笔记本python爬取网页后怎么存下来_python 爬取csdn网页并保存博客到本地
  12. java web 读取txt文件_java读取TXT文件
  13. 快递是如何被送到你手里的?一文读懂风口上的仓储自动化
  14. SHN-PEG2000-Pyrene,Pyrene-PEG2000-NHS
  15. 对于 Latex CJK 的一些解释
  16. 安装U8后服务器开机加载信息慢,用友U8 安装ADSL后,连接服务器非常慢
  17. android WIFI相关问题集合
  18. 芯准TSN系统的测试与验证(1)——测试环境配置
  19. ******CSDN后引发 7K7K 、嘟嘟牛、178、多玩、猫扑、人人等各大知名网站数据库下载地址 (转载)...
  20. Docker容器化实战第七课 容器编排Docker Compose、Docker Swarm 和 Kubernetes

热门文章

  1. python的数值类型和运算符_python的数值类型和运算符
  2. plot、bar、stem、area函数绘图
  3. java中的compareTo函数
  4. triu--上三角矩阵的抽取
  5. 径向基函数插值(2)一维数据的插值
  6. collections python_python: collections
  7. 解决方法WindowsError: [Error 193] %1 is not a valid Win32 application
  8. Python跨平台文件夹分割方法os.sep
  9. sklearn中的fit_transform和transform以及什么时候使用
  10. 微信和支付宝中的一些常用方法封装