在刷知乎的时候看到有人用桌面图标搞事情,我看到后就去试了下能不能用图标玩游戏,比如玩贪吃蛇,发现是可以的。
0x1:首先获取桌面句柄,先用spy++查看桌面的类名和标题,再用FindWindowEx()函数获取句柄,函数具体用法自行百度。
下面是win7下获取句柄的方法。
下面是win10下获取句柄的方法,用与win7同样的方法获取不了(还是我太菜了),所以这里遍历了桌面所有窗口。
0x2:获取句柄之后就可以对图标进行操作了,用到PostMessage()发送消息,函数原型如下
BOOLWINAPI PostMessage(HWNDhWnd,UINTMsg,WPARAMwParam,LPARAMlParam);
主要用到这个函数获取图标数量和设置图标的坐标,代码如下。
index为图标的下标,比如桌面左上角第一个下表就是0,依次递增
这里传递的消息在commctrl库里,在坐标传递这里用到MAKELPARAM这个宏,在python里没有,参照官方的定义用python重写了一个
0x3:有了前两部游戏基本就完成了,套用一下简单的贪吃蛇逻辑代码就可以了,这里简单说一下。
首先初始化蛇身和设置随机食物,由于设置图标位置的参数太长了,所以写成了一个SetIconPosition()函数,这样只需要传递下标与坐标就可以了。
本机分辨率1920x1080,这里的坐标经过测试,左上为20,20,右下为1860,980,间隔80,可以自己测试设置
这里监控键盘的上下左右键,用到了pynput这个库,主程序用到了死循环,而当监控键盘时也会进入死循环监控,所以这里用了Thread添加到多线程里。
下面是主程序的死循环,主要是为了蛇的移动。
通过move_snake()函数改变蛇皮的方向和增加蛇的长度
0x4:注意事项!!!
游戏前必须在桌面右键,在查看里,把"自动排列图标"、"将图标与网格对其"取消勾选,这样才能正常游戏!!!
第一个发文
欢迎大家在评论区留言。