从Win32消息值反推出名称串:自动代码生成

本文介绍了如何使用C++自动生成代码,从Win32 API的WinUser.h文件中提取并转换消息值到消息名称。通过扫描头文件,创建映射表,实现WM_前缀消息的转换。文章讨论了处理值域冲突、条件编译、以及在解析过程中遇到的挑战和解决方案,同时提到了其他类型的消息和跨进程通信的注册消息。
摘要由CSDN通过智能技术生成

     些天刚开始学习win32 API,出于对未知的不安,我试图用打印出所有爬过系统的消息的详细资料。其中有个简单的需求:从消息值反推出名称串,类似:

     在MSDN上搜了下,貌似没有API;也没怎么找到网上的资源,只好自己动手了。

 

 


 

     我们现在就要获得一个完整的、C++程序能识别的消息值-消息名的表。Win32的大部分消息在 WinUser.h 中定义的,形如:

     考虑到消息种类非常多,手工完成这个表很累也很容易出错。这里我想起一种有趣的技术:我们可以用C++写一个自动程序,扫描 WinUser.h 文件,自动完成所需的C++代码。碰巧逻辑也不难。以最重要的 WM_前缀消息为例,只要将所有以 "#define WM_” 开头的行提取出来,分别读出字符串 "WM_ PAINT" 以及剩下的串"0x000F",就可以转化为类似下的 C/C++ 代码:

     这样算还相当稳健,规避了棘手的表达式解析。鉴于后面将提到的条件编译问题,保留表达式反倒比解出来更准确。
 

     这里共享一个简化的版本,包括 VS2008 的 WinUser.h 中所有 WM_ 前缀的消息(该文件可以编译通过): 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值