python 收到托盘 python 托盘图标_python 收到托盘


在刷知乎的时候看到有人用桌面图标搞事情,我看到后就去试了下能不能用图标玩游戏,比如玩贪吃蛇,发现是可以的。

0x1:首先获取桌面句柄,先用spy++查看桌面的类名和标题,再用FindWindowEx()函数获取句柄,函数具体用法自行百度。

下面是win7下获取句柄的方法。


python 收到托盘 python 托盘图标_句柄_02


下面是win10下获取句柄的方法,用与win7同样的方法获取不了(还是我太菜了),所以这里遍历了桌面所有窗口。


python 收到托盘 python 托盘图标_句柄_03


0x2:获取句柄之后就可以对图标进行操作了,用到PostMessage()发送消息,函数原型如下

BOOLWINAPI PostMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);

主要用到这个函数获取图标数量和设置图标的坐标,代码如下。


python 收到托盘 python 托盘图标_句柄_04

index为图标的下标,比如桌面左上角第一个下表就是0,依次递增

这里传递的消息在commctrl库里,在坐标传递这里用到MAKELPARAM这个宏,在python里没有,参照官方的定义用python重写了一个


python 收到托盘 python 托盘图标_句柄_05


0x3:有了前两部游戏基本就完成了,套用一下简单的贪吃蛇逻辑代码就可以了,这里简单说一下。

首先初始化蛇身和设置随机食物,由于设置图标位置的参数太长了,所以写成了一个SetIconPosition()函数,这样只需要传递下标与坐标就可以了。


python 收到托盘 python 托盘图标_句柄_06

本机分辨率1920x1080,这里的坐标经过测试,左上为20,20,右下为1860,980,间隔80,可以自己测试设置

这里监控键盘的上下左右键,用到了pynput这个库,主程序用到了死循环,而当监控键盘时也会进入死循环监控,所以这里用了Thread添加到多线程里。


python 收到托盘 python 托盘图标_python贪吃蛇_07


下面是主程序的死循环,主要是为了蛇的移动。


python 收到托盘 python 托盘图标_句柄_08


通过move_snake()函数改变蛇皮的方向和增加蛇的长度


python 收到托盘 python 托盘图标_句柄_09


0x4:注意事项!!!

游戏前必须在桌面右键,在查看里,把"自动排列图标"、"将图标与网格对其"取消勾选,这样才能正常游戏!!!


第一个发文

欢迎大家在评论区留言。