自己写的天猫双11抢红包助手

又到了一年一度的双11,今年天猫的双11活动是亲品牌商标抢红包,活动规则很简单:选择某个品牌后进入游戏,主界面上有两个小人跳蹦床,一上一下位置错开,看准两个小人的脸基本成同一高度时按空格键或点击鼠标左键完成一次亲吻,在这个时刻连续不断按键即可达成多次亲吻,游戏限时8秒,结束时会统计亲吻次数并有机会获得红包奖励,如果没获得红包会显示“再来一次”按钮。

每年的双11活动都很诱人,当然,我没那么多时间一天到晚抢红包。相比往年的切红包、切金猪之类(因为需要按住鼠标左键拖拽而且目标位置不固定),今年的抢红包活动还算简单,因为只需要鼠标点击固定位置即可(把鼠标放在“再来一次”的按钮位置不断按键)。于是我尝试用C++写了一个挂机抢红包的工具。

开发思路是注册两个系统热键,一个用于发送鼠标按键,一个用于停止鼠标按键。当按下发送热键时,开启一个Timer,每隔N毫秒发送一次鼠标左键点击(之所以这样设计,是为了尽可能模拟真实点击。起初设计时没使用计时器而一次循环发送多个点击,有点假),点击的位置为游戏网页上“再来一次”的按钮位置。经测试,如遇到抽中红包,“再来一次”按钮的位置不会响应鼠标左键点击,也就使游戏停止了,这是我们期望的现象。

开发过程经历了两次设计,起初设计时考虑得比较简单,只是模拟鼠标点击,这就要求游戏的网页必须放在窗口最前端并且鼠标的位置恰好得位于“再来一次”按钮所在的区域,也就是说使用了程序以后不可以做其他事情,只能让它挂机运行,不过可以放在虚拟机里运行,这样就不影响正常使用电脑了。界面如下:

经过本人亲测和小伙伴们的试用,普遍感觉使用起来不太灵活。于是我尝试了另一种设计,即通过往浏览器窗口发送鼠标按键消息来完成,这就需要事先获得浏览器窗口的句柄,并且发送鼠标按键消息前还得指定鼠标位置,这是这个设计的难点所在。我使用了Spy++分析了IE浏览器(IE8,IE9)和360安全浏览器的窗口句柄结构,然后通过FindWindow找到浏览器顶层窗口句柄,接着用GetWindow继续查找到浏览器客户区的句柄,

最后往这个句柄SendMessage(hwnd,WM_LBUTTONDOWN,0,MAKELPARAM(xPos,yPos)),其中xPos和yPos是鼠标相对于浏览器客户区的坐标值,这两个值需在“再来一次”按钮所在区域范围内,目前看来只能通过人工猜测得来,我用1366*768的分辨率,IE9最大化时的坐标值分别为590,470。为了便于猜测坐标值,我在OnTimer的事件中使用GDI函数TextOut在目标窗口上输出了一个文字图形用来显示当前的xPos和yPos的实际位置。一旦鼠标位置设定准了以后,发送快捷键就可以执行起挂机任务了,更重要是可以最小化窗口同时干其他事了哦。界面如下:

 

可能这次活动并不是以亲吻次数多少来决定红包归属,但我想这是一个很好的尝试,用计算机来自动完成简单重复的工作,因为可以肯定的是这个游戏中如果一次都不亲的话是不可能得红包的。也许有的小伙伴会喜欢用按键精灵之类的工具,我觉得用自己写的程序更有成就感,也更有利于技术的提高。这个程序目前做得还是比较粗糙简单,高手们见笑了,如果您有何指教,感谢您不吝赐教!

附上EXE下载地址:https://files.cnblogs.com/efanscai/hotkeyhelper2.zip

源码下载(因为有时可能窗口句柄捕获得不对导致无法正常执行,有能力的小伙伴可以修改下源码)

posted @ 2013-11-03 11:29  大神老姜  阅读(574)  评论(2编辑  收藏  举报