Windows控制台程序处理消息编程实例二则
一 控制台程序处理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控制台程序处理消息编程实例二则相关推荐
- 【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )
文章目录 一.报错信息 二.解决方案 一.报错信息 Windows 控制台程序编译报错 : 已启动生成- 1>------ 已启动生成: 项目: hacktool, 配置: Debug Win3 ...
- 【Visual Studio】Visual Studio 2019 创建 Windows 控制台程序 ( 安装 ‘使用 C++ 的桌面开发‘ 组件 | 创建并运行 Windows 控制台程序 )
文章目录 一.安装 C++ 桌面开发组件 二.创建并运行 Windows 控制台程序 一.安装 C++ 桌面开发组件 打开 Visual Studio Installer , 点击 " 修改 ...
- Windows机制下的游戏编程实例一
稍微接触一下Windows游戏编程基础,虽然不大喜欢游戏,但是为了扩大知识面,为以后的创新与启发打下基础,还是稍微了解一下: 先来看一个实例吧: 这是程序的文件目录: 里面包含背景音乐与背景图像模板 ...
- windows机制下的游戏编程实例二
通过调用DirectX SDK库实现游戏空间的三维化,也就是我们通常玩的网游,鼠标拖着主角到处跑去完成任务(个人觉得这种游戏超无聊).下面先给出效果图: 还是先给出其文件目录吧,从总体把握实例,也是很 ...
- 一元二次求解matlab程序,规范MATLAB编程实例——求解一元二次方程
好的程序应当具有较好的可读性,良好的可读性可以使得编程者和使用者读程序的时候顺畅很多.如果程序编得很混乱,有可能当编程者久隔多日再一次打开程序时,就读不懂原来的程序了. 下面从一个简单的实例出发,说明 ...
- Windows控制台程序“选定模式”的问题
最近用Nodejs写了个代理程序,一直用的好好的,木有问题,今天突然发现不能用了,使用telnet去连代理的端口也能连通,可是服务就是不能正常使用,提示连接超时. 当时猜测是Nodejs的某个地方阻塞 ...
- 数控g71编程实例带图_数控程序中g71编程实例
可选中1个或多个下面的环节词,搜刮相关材料.也可间接点"搜刮材料"搜刮整个问题. 为了满足设想.制造.维修和普及的需要,在输入代码.坐标系统,加工指令.辅助功能及法式格局等方面,国 ...
- Windows多线程控制台程序
学习笔记 Windows多线程控制台程序目的:学习和掌握如何编写Windows多线程控制台程序.通过编写程序,加深对进程和线程关系的理解,掌握多线程程序的执行和编写技巧.设计要求:写一个单进程多线程的 ...
- 【转】为控制台窗口建立消息队列
介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较"生僻"的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进 ...
最新文章
- MySQL开发医药管理系统_java Web开发医药后台管理系统mysql版本源代码下载,支持中英文...
- 解题报告:SP1043 GSS4 - Can you answer these queries III(GSS线段树八部曲之三)(区间最大连续子段和)
- h5+ 获取当前位置 并获取当前天气
- 在mysql中创建表的命令行_如何在命令行创建一个MySQL数据库
- 动态变量和静态变量的区别,堆和栈的区别
- HTML5 Placeholder实现input背景文字提示效果
- ASP.NET Core中的内存缓存
- dockerfile文件名_Linux云计算教程全套视频合集:Dockerfile详解(一)
- 华为:预计6G将于2030年左右投向市场
- 3.4K字,让老板对你的模型稳定性不再质疑
- 苹果笔记本python爬取网页后怎么存下来_python 爬取csdn网页并保存博客到本地
- java web 读取txt文件_java读取TXT文件
- 快递是如何被送到你手里的?一文读懂风口上的仓储自动化
- SHN-PEG2000-Pyrene,Pyrene-PEG2000-NHS
- 对于 Latex CJK 的一些解释
- 安装U8后服务器开机加载信息慢,用友U8 安装ADSL后,连接服务器非常慢
- android WIFI相关问题集合
- 芯准TSN系统的测试与验证(1)——测试环境配置
- ******CSDN后引发 7K7K 、嘟嘟牛、178、多玩、猫扑、人人等各大知名网站数据库下载地址 (转载)...
- Docker容器化实战第七课 容器编排Docker Compose、Docker Swarm 和 Kubernetes
热门文章
- python的数值类型和运算符_python的数值类型和运算符
- plot、bar、stem、area函数绘图
- java中的compareTo函数
- triu--上三角矩阵的抽取
- 径向基函数插值(2)一维数据的插值
- collections python_python: collections
- 解决方法WindowsError: [Error 193] %1 is not a valid Win32 application
- Python跨平台文件夹分割方法os.sep
- sklearn中的fit_transform和transform以及什么时候使用
- 微信和支付宝中的一些常用方法封装