鱼C论坛

 找回密码
 立即注册
查看: 3725|回复: 1

[学习笔记] 《解密系列-基础篇》第四讲:Windows消息机制

[复制链接]
发表于 2017-12-19 21:10:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 shuiyu 于 2017-12-19 21:14 编辑

越努力,越幸运。欢迎大家来看我的笔记,不对的请各位大佬指正,谢谢
一、Windows 消息机制
(1)Windows系统与应用程序之间、应用程序与应用程序之间的通讯就是通过消息来触发,并靠对消息的响应和处理来完成。Windows系统中有两种消息队列:一种是系统消息队列,另一种是应用程序消息队列。
(2)响应相应操作:先拷入系统消息队列,然后再拷到应用程序消息队列。
(3)Windows为当前执行的每个Windows程序维护一个消息队列。在发生任何事件之后,系统将该事件转换为一个消息,并将消息投放入程序的消息队列中。程序通过执行一块称之为消息循环的程序代码从消息队列中取出消息!下面的就是消息队列(消息机制):
while(GetMessage (&msg, NULL, 0, 0))       
{        
    TranslateMessage (&msg) ;  // 翻译消息      
    DispatchMessage (&msg) ;   // 分配消息    
}  

二、MSG 结构(消息结构)
(1)
typedef struct tagMSG {   // 定义一个消息结构
    HWND        hwnd;     // 消息对应的句柄
    UINT        message;  // 消息的类型
    WPARAM      wParam;   // 消息的第一个参数
    LPARAM      lParam;   // 消息的第二个参数
    DWORD       time;     // 发送消息的时间
    POINT       pt;       // 发送消息时鼠标所                                            在的位置
} MSG
(2)通俗来讲:消息不过是定义一个结构, 定义一堆ID, 在程序运行的过程中调用switch 和 case拦截去完成相应的功能。

三、从实例中了解到的
(1)Windows的程序入口(或者说是从哪开始)都从WinMain开始的。(当然重新命名的就不算了)
(2)PostQuitMessage寄送一个WM_oUT消息给线程的消息队列并立即返回;此函数向系统表明有个线程请求在随后的某一时间终止。
(3)
PostMessage 结束程序的作用
SendMessage    同上
区别:
PostMessage该函数将一个消息放入(寄送)到与指定窗口创建的线程相联系消息队列里,不等待线程处理消息就返回。SendMessage该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而函数PostMessage不同,将一个消息寄送到一个线程的消息队列后立即返回。
(4)窗口的过程
2.png
(5)简单的Windows程序:
3.PNG

问题:为什么使用管道符“ | ”就可以把两个标志一起显示呢??
小甲鱼的提示:从标志的宏定义入手:
4.png
个人猜测:首先我们要明白,管道符“ | ”在C语言中,就是”或“的意思;我们现在就当它是“或”(一真为真!不知道大家还记不记得)。那么只要有一个是正常的标志宏定义,不管与它”或“的是什么,都会为真的,从而可以正常显示。同理,如果两个都是正常的标志宏定义的话,那么也就实现了把两个标志一起显示。

课后题就是查一查几个API函数,就不贴上来了(全靠自觉 )。

谢谢小甲鱼带来的视频教程,感谢!!

本节结束,多谢览阅!
越努力,越幸运。谢谢大家来看我的笔记,不对的请各位大佬指教,谢谢

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-8 23:22:13 | 显示全部楼层
本帖最后由 cosmos3919 于 2020-1-8 23:29 编辑

管道符“|”类似于或,它是按位运算符,按位或的意思
第一组mb占long32位的低4位,第二组mb占接下4位,从第一组和第二组各取一位组合按位或互不干扰,所以能得到正确信号
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 20:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表