解读spy++,鼠标按下雷电模拟器,产生的一系列Windows Message消息队列解读

最近想要用JNA写一个后台自动运行的窗口,但是弄了很久,发送sendmassage,总是什么反应都没有,所以一狠心,直接将实际操作点击鼠标产生的信息,全部解读一遍,一边看msdn,一边解读,我只是个四级没过的英语渣,太难了。
~~o(>_<)o ~~
(*꒦⌓꒦)
首先看一下我们的图:
在这里插入图片描述

目录:

在这里解读之前首先讲一下简单基本概念,

<000001>表示行数
000D0724:表示窗口句柄
S:表示通过WindowsAPI的SendMessage发送的消息
P:表示postMessage发送消息
R:表示返回值(Return)
WM_NCHITTEST:表示消息信息,msg

消息缩写解读

WM:wm系统是Windows Mobile的缩写,是 Microsoft 用于 Pocket PC 和 Smartphone 的软件平台。
NC:nc的英文全称是nonclient,和client相对应
加nc的是指非客户区消息
IME:IME是指Input Method Editors输入法编辑器,当系统侦测到暂时无需使用输入法,或者程序不兼容Windows 8时,将自动提醒无法使用,且右下角显示已禁用IME。如果使用鼠标或触摸屏激活焦点时需要使用输入法时,系统则会自动启用IME输入法以便使用键盘输入。
NOTIFY:notify—通知

返回值解读:

对每一行的窗口进行解读,可能有些不太准,有问题可以在评论下提醒一下
f类:
fHalt----父类暂停
hwndToplevel:顶层句柄-----就是我们点击选中窗口句柄
nHit Test:HTCLIENT—>击中测试:在客户端
uMsg:附带消息指令

1行:S(发送数据):

具体解析:我们可以知道这个是移动鼠标中产生的,移动的鼠标,坐标(666,300)

2行:R(返回的数据):

返回的是HTRIGHT,查看msdn可以知道:

在可调整大小窗口的右边框中(用户可以单击鼠标以水平调整窗口大小)。

WM_SETCURSOR:如果鼠标导致光标在窗口内移动,并且没有捕获鼠标输入,则发送到窗口。

3行:发送数据:WM_SETCURSOR:

参数解析:

hwnd:000D0724,父类,顶层窗口的句柄

nHittest:HTRIGHT,光标在窗口的右边框

wMouseMsg:WM_MouseMove------鼠标移动
fuActive:父窗口激活

4行:WM_SETCURSOR返回值:fHalt Processing:Ture

轮英语的重要性:Halt:停止; 阻止; 暂停; 小火车站(只有站台);

所以我们可以知道这个窗口的信息怎么解析:

父类进程是否是暂停的?是(ture)

这个又是干嘛呢?WM_MOUSEMOVE为post消息。对于几乎所有的鼠标消息,如果mouse没有被捕获(capture),那么将被发送到包含光标的窗口,否则发送到捕获鼠标的窗口。只有前景窗口可以Capture鼠标。使用SetCapture捕获鼠标,且一个时刻只能有一个窗口Capture鼠标。

https://blog.csdn.net/redoc_li/article/details/1655857

=想法能不能一秒分成很多秒,执行的时候setCapture,之后一毫秒只有重新修改

5行:WM_NCMOUSEMOVE(P)

HitTest:命中测试–

所以这句话的意思是:左边框命中测试,坐标(X,Y)

注意:这里的p代表是postMessage进行发送不是sendMessage

6行:WM_PARENTNOTIFY(发送)

当子代窗口上发生重要操作时,发送到窗口。该消息现在被扩展到包括WM_POINTERDOWN事件。创建子窗口时,系统在创建窗口的CreateWindow或CreateWindowEx函数之前发送WM_PARENTNOTIFY。当子窗口被销毁时,系统在进行销毁该窗口的任何处理之前发送消息。

理解:子窗口发生一个重要事件,通知父窗口,在父窗口下发生事件:鼠标左键按下,坐标

7行:WM_PARENTNOTIFY(R返回)

8行:WM_MOUSEACTIVATE(S)

参数解析:

hwndToplevel:顶层句柄-----就是我们点击选中窗口句柄

nHit Test:HTCLIENT—>击中测试:在客户端

uMsg:WM_LBUTTONDOWN—>鼠标按下左键

9行:WM_MOUSEACTIVATE(R)

参数解析:

fuActive:MA_ACTIVATE—>>激活窗口,不丢弃鼠标消息。

10行 :WM_WINDOWPOSCHANGING(S)

发送到 Z order中的大小、位置或位置将因调用SetWindowPos函数或其他窗口管理函数而发生更改的窗口,也就是说将窗口的一些基本信息发送出去。

11行:WM_WINDOWPOSCHANGING(R)

12行:WM_WINDOWPOSCHANGED(S)

这个消息与上面的消息很像,但是看了一下mdsn发现的他们的解释基本都是不一样的,所以查一下的最后找到了这篇文章:
https://devblogs.microsoft.com/oldnewthing/20080116-00/?p=23803#:~:text=The%20WM_WINDOWPOSCHANGING%20message%20is%20sent%20early%20in%20the,the%20WM_WINDOWPOSCHANGING%20message%20and%20modifying%20the%20WINDOWPOS%20structure.

但是如果我们直接把这两个的消息翻译成为小写的haul,我们就很容易看出来了

wm_windowposchanging 和 wm_windowposchanged

wm_window pos changing 和 wm_window pos changed

一个正在进行时,一个过去式。
dddd;

所以他们附加的信息lpwp的值才会是一样的

13行:WM_WINDOWPOSCHANGED(R)

返回值,不解释了

14行:WM_ACTIVATEAPP(S)

WM_ACTIVATEAPP表示如果这个不是我们当前用的激活的窗口,那么,这个信息就会在被激活之前发送过去判断的

所以这个的意思是,这个窗口是不是已经被激活了,fwActive表示父类窗口已激活,==这个窗口已经被激活了

之后就停掉之前前线程窗口,在我们没有激活窗口之前的的线程

所以dwThreadID中d的意思应该是摧毁(destroy),摧毁当前执行的线程,到另外一个一个线程中去

不过线程id为000000:很可能是因为没有这个线程

15行:WM_ACTIVATEAPP(R)

16行:WM_NCACTIVATE(S)

表示是非聚焦的窗口激活

17行:WM_NCACTIVATE(R)

18行:WM_ACTIVATE(S)

fwActivate:WA_CLICKACTIVE------->通过鼠标点击激活。

fminimized-------表示父类是否是最小化,:false

hwndPreviouse:前一个句柄:null

19行:WM_IME_NOTIFY(S)

从缩写中可以看懂,Windows系统_键盘__通知

发送到应用程序,通知它对IME(键盘焦点)窗口的更改。

dwCommand:IMN_OPENSTATUSWINDOW------>小写:Imn_openStatusWindow-----》窗口开启状态

应用程序处理此命令以自行显示IME的状态窗口

20行:WM_IME_NOTIFY®

21行:WM_SETFOCUS(S)

hwndLosefocus:失去焦点的句柄为null

22行:WM_SETFOCUS®

23行:WM_ATIVATE(R)

窗口激活,对应第18行

最后看评论收藏,赞数更新

~( ̄▽ ̄~)(~ ̄▽ ̄)~

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值