一、什么是“QQ对战平台挤房器”?

喜欢在“QQ对战平台”或“浩方对战平台”玩游戏的人都知道。平常平台上的房间基本很多都是人满的,如果想找个房间,那可是要费好长的时间来“挤”才能进去,如果是节假日或晚上,那更要花费更多的时间在“挤”房上了,如下图:

而对于“QQ对战平台”,如果房间已满挤不进去,却变态的还会弹出两次提示!平时,就只有拼命的按“回车键”或“空格键”关闭这两个讨厌的弹出窗口,然后再用鼠标点房间,如果房间还是进不去,就只能再按上面来一次循环……一次、两次不是问题;五次、十次也许还不是问题;但如果十几次或上百次还是挤不进去,还手按那就有问题了!当然,如果你喜欢手虐那就另外说了-_-#

我不喜欢手虐,所以当有次碰到N次还是挤不进去时,我就在想,为什么不写个工具来代替我的手,用工具自动去帮我“挤”房间,帮我点那两个讨厌的提示窗口呢?于是这篇文章中的“QQ对战平台挤房器”就这样诞生了(这可解放多少人的双手啊,大家鼓掌……)

二、“挤房”要怎样“挤”?

上面说了,“挤房器”就是帮我们自动“挤”房,但是它要怎么帮我们“挤”呢?它毕竟是机器,而不是人,它不会自动一看到房间就帮我们“挤”,除非我们给它定制了一套规则(也可以叫命令)。机器就是机器,有规则它才会去做事,如果没规则也会做事,那它就是“人”(智能机器人?)了。

这规则要怎样定制?让我们先来看看我们平时进入房间的流程,如下图:

好了,根据上面的流程,我们要给“挤房器”定制的规则就是分别以下几条:

1)、点击房间。

2)、判断是否已进入房间,如果没有进入房间,则负责将显示房间满的两个讨厌的提示窗口关闭掉,并重新回到第1步。

3)、已进入房间,则停止“挤”房动作。

三、自动“挤房”的实现。

这里的实现,就是用代码去实现上面定制的三个规则。

1、点击房间:

在这里我们简单点,只是模拟鼠标去点击鼠标当前所在的房间。说到这里,也许做过WINDOWS应用程序开发的朋友已想到了用哪几个API函数去模拟,对!就是以下几个API的结合一起使用,就能实现鼠标的模拟点击了。

1)、GetCursorPos : 获取鼠标的当前所在位置。

定义原型如下:

  1. [DllImport("user32.dll")]
  2. internal static extern bool GetCursorPos(out Point lpPoint);

复制代码

此函数返回当前鼠标所在的坐标位置。

2)、mouse_event : 鼠标事件的模拟

定义原型如下:

  1. [DllImport("user32.dll", EntryPoint = "mouse_event")]
  2. public static extern void mouse_event(
  3. int dwFlags,
  4. int dx,
  5. int dy,
  6. int dwData,
  7. int dwExtraInfo
  8. );

复制代码

此函数通过不同的dwFlags参数定义,可以模拟不同的鼠标事件,如鼠标左键的按下、弹起事件等。

结合以上两个API函数,我们就能实现自动点击鼠标所在的房间"的效果了,类似如下代码:

  1. Point point;
  2. if(Win32API.GetCursorPos(out point)){
  3. //MouseAPI是对mouse_event API函数的一个简单封装。
  4. MouseAPI.SendMouseEvent(MouseAPI.MouseEvents.LeftButtonDown | MouseAPI.MouseEvents.LeftButtonUp, point, true);
  5. }

复制代码

但是上面的代码是非常“机械”的,也即是不管当前鼠标所在的窗口是不是在房间上,它都会自动“点击”一次!这样可不人性化,所以我们再改进一下,点击时先判断当前鼠标停留的是不是在对战平台的房间上,但可惜的QQ对战平台的房间不是标准WINDOWS 控件,所以无法获取到房间的数据,最后只好简单点判断鼠标停留的窗口是不是QQ对战平台的大厅,因为大厅是可获取到的WINDOWS窗口控件,如下图是用Spy++获取到的大厅数据:

也就是我们判断鼠标停留的窗口的类型是不是属于“Afx:400000:3”即可,如果是则表明鼠标是停留在QQ对战平台的游戏大厅中的,就可以点击房间了(注意:这里停留的位置不一定是房间上,但这不影响使用,所以我就没加以处理了)

这里需要使用的API有:

3)、WindowFromPoint : 获取某个坐标位置所在的窗口

定义原型如下:

  1. [DllImport("user32.dll")]
  2. internal static extern IntPtr WindowFromPoint(Point Point);

复制代码

4)、GetClassName : 获取某个窗口的类型名称

定义原形如下:

  1. [DllImport("user32.dll",  CharSet = CharSet.Unicode, SetLastError = true)]
  2. internal static extern int GetClassName(IntPtr hWnd, StringBuilder buf, int nMaxCount);

复制代码

加入上面的条件判断,上面的代码改进后如下:

  1. if (Win32API.GetCursorPos(out point))
  2. {
  3. hwnd = Win32API.WindowFromPoint(point);
  4. if (hwnd != IntPtr.Zero)
  5. {
  6. string className = Win32API.GetWindowClassName(hwnd);
  7. if (className.Equals("Afx:400000:3"))
  8. {
  9. MouseAPI.SendMouseEvent(MouseAPI.MouseEvents.LeftButtonDown | MouseAPI.MouseEvents.LeftButtonUp, point, true);
  10. }
  11. }
  12. }

复制代码

这样“点击房间”这步就可以算完美了,当鼠标不在房间(正确的说不在游戏大厅)上停留时,鼠标也不会乱点,这就方便在“挤房间”时随时可以切换窗口了。

2、判断是否已进入房间,如果没有进入房间,则负责将显示房间满的两个讨厌的提示窗口关闭掉。

1)判断是否已进入房间: 和上面那步判断鼠标是否停留在游戏大厅一样,也是判断鼠标是否停留在聊天室中,如果是那么就表示已挤进去了。用Spy++获取到聊天室的窗口类型分别是“RichEdit20A”和“Afx:44a0000:0” ,所以判断代码如下:

  1. //判断鼠标是否停留在聊天窗口上
  2. if (Win32API.GetCursorPos(out point))
  3. {
  4. hwnd = Win32API.WindowFromPoint(point);
  5. if (hwnd != IntPtr.Zero)
  6. {
  7. string className = Win32API.GetWindowClassName(hwnd);
  8. if (className.Equals("RichEdit20A")
  9. || className.Equals("Afx:44a0000:0"))
  10. {
  11. isOk = true;
  12. }
  13. }
  14. }

复制代码

如果isOk=true则表示已挤进房间。则就可以停止“挤房”,否则就要处理那两个讨厌的提示窗口了。

2)关闭提示窗口:

先需要判断是否有这两个提示窗口出现,因为在挤房过程中,QQ对战平台会优先显示一个进度条(窗口)。我们为了简单点处理,只是判断当前活动窗口是否是“提示窗口”即可,也即是简单的判断当前活动窗口中是否包含那个“确定”按钮,如果存在,那么就简单的认为这窗口是那提示窗口,关闭它即可。需要用到的API函数有以下几个:

A、GetForegroundWindow : 获取当前活动窗口

它的定义原形:

  1. [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
  2. public static extern IntPtr GetForegroundWindow();

复制代码

B、FindWindowEx : 查找某个窗口

它的定义原型:

  1. [DllImport("user32.dll", EntryPoint = "FindWindowEx", SetLastError = true, CharSet = CharSet.Unicode)]
  2. internal static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

复制代码

关闭提示窗口,则只使用简单的方法,也即是发送“回车键”即可,因为我们获取到的窗口是当前活动窗口,并且又是模式窗口,所以它能接受键盘消息。关于键盘的模拟,请参考我的这篇文章《C#对游戏手柄的编程开发-API篇(3)》。

最后代码如下:

  1. if (!isOk)
  2. {
  3. //没有挤进去,则判断是否有提示窗口弹出,有的话关闭掉它
  4. hwnd = Win32API.GetForegroundWindow();
  5. if (hwnd != IntPtr.Zero)
  6. {
  7. //查找活动窗口是否包含有"确定"按钮
  8. IntPtr buttonHwnd = Win32API.FindWindowEx(hwnd, IntPtr.Zero, "Button", null);
  9. if (buttonHwnd != IntPtr.Zero)
  10. {
  11. KeyboardAPI.SendKeyEvent(Keys.Enter, KeyboardAPI.KeyboardEvents.KeyDown | KeyboardAPI.KeyboardEvents.KeyUp);
  12. }
  13. }
  14. }

复制代码

isOk是上面判断有没有“挤”进去的值,如果没有“挤”进去就进行上面的“关闭提示窗口”的操作,如果已“挤进去”则停止即可。

到此,将上面的所有代码整合到一起,并加入到Timer的定时执行中,我们的“QQ对战平台挤房器”就实现了。

以下提供程序下载(不提供源码,但你可以对其反编译查看):[ 评价与收藏 ]
http://u.115.com/file/aqbpd6r9#
QQBattleThruster.rar

用C#打造QQ对战平台挤房器相关推荐

  1. 艾伟_转载:用C#打造quot;QQ对战平台挤房器quot;

    一.什么是"QQ对战平台挤房器"? 喜欢在"QQ对战平台"或"浩方对战平台"玩游戏的人都知道.平常平台上的房间基本很多都是人满的,如果想找个 ...

  2. QQ对战平台挤房器 要的拿去

    下载:QQ对战平台挤房器 处女作,有什么建议联系我QQ290387340 转载于:https://www.cnblogs.com/zhangdongsheng/archive/2011/09/06/2 ...

  3. 如何处理在WINDOWS VISTA上安装VS2008时遇到要求安装WINDOWS XP SP2的错误和QQ对战平台安装后不能登录的问题

    偶就是用这个方法解决了在VISTA上安装VS2008和QQ对战平台的兼容性问题,呵呵 http://blogs.msdn.com/astebner/archive/2007/08/02/4195204 ...

  4. 帝国时代2php存到哪里,window_在Vista、Win7下联网玩QQ对战平台、浩方、帝国时代2,曾几何时,我们在宿舍区组网 - phpStudy...

    曾几何时,我们在宿舍区组网,玩三角洲,帝国时代2 一转眼,8年过去了 现在想想,还真是美好的回忆 这两天突然想重温当时玩帝国时代2的快感,搞了一个来玩, 结果我发现vista默认没有ipx协议(对战要 ...

  5. 对战平台有哪些和到底哪个好?

    对战平台专题为大家推荐一些非常热门的游戏对战平台下载大全,新手玩家搞不清游戏对战平台有哪些和到底哪个好? 推荐软件:浩方电竞平台 浩方电竞平台是世界上最大的网络游戏对战平台,让喜欢网游.电竞的朋友可以 ...

  6. b5对战平台服务器位置,b5对战平台客户端

    b5对战平台客户端是一款为CSGO玩家精心打造的对战平台,b5对战平台内容丰富,功能强大,让您畅享游戏乐趣,拥有匹配对战服务器与社区娱乐服务器(牛逼服),为CS:GO提供更优质的对战服务. b5对战平 ...

  7. b5对战平台服务器位置,csgob5对战平台

    <csgob5对战平台>是一款专为csgo玩家打造的游戏平台,软件中具有关于CSGO的相关游戏服务,更多的武器可以查看,更多的功能可以使用,感受便捷的游戏服务,有需要的用户可以自行下载使用 ...

  8. 浩方、vs 等对战平台的危险

    近日在家通过台网玩测试版<星际争霸2>,发现每次都得连线注册,不仅联想了一些事情. 1.浩方.vs 等对战平台的危险 当然在教育网还常用AA,这些对战平台其实大都是依附于 局域网对战游戏. ...

  9. 从11对战平台获取玩家数据进行分析

    首发:个人博客,更新&纠错&回复 在11对战平台好友列表中右键可以查看他的战绩,该页面的地址实际是这样: http://score.5211game.com/RecordCenter/ ...

  10. 游戏对战平台搭建要选什么服务器

    游戏对战平台搭建要选什么服务器 服务器是游戏平台数据传输的重要载体,事关我们游戏创业发展的稳定性.安全性.那么,游戏平台搭建要选什么服务器?有什么参考指标?本文艾西将带领大家一探究竟! 首先是&quo ...

最新文章

  1. 斩获“卡脖子”领域世界冠军!这支华科战队全网刷屏,平均年龄24岁
  2. kafka 出现Java heap space的解决方法
  3. [BZOJ]1095 Hide捉迷藏(ZJOI2007)
  4. Python爬虫入门教程 44-100 Charles的安装与使用-手机APP爬虫部分
  5. 如何提高员工的能动性,体现员工的自我价值
  6. id 怎么获取jira 评论_【JIRA】如何快速地批量查找各迭代的SprintID
  7. windows 子系统认识(1)
  8. AMPL在Matlab上的一个简单Demo
  9. Linux下SVN客户端使用教程(全)
  10. miui v5 android版本,miuiv5主题下载-miuiv5主题(MiroEX) 安卓版v3.4.1-PC6安卓网
  11. Word交叉引用连续引用多个参考文献
  12. 概率论笔记(四)概率分布的下期望和方差的公式总结
  13. 网上查信用报告,什么是数字证书验证?
  14. 《精进:如何成为一个很厉害的人》读后感
  15. 领取1024节日勋章(程序员必看)
  16. 5不触发系统键盘_智能化子系统红外周界报警的基础知识介绍!
  17. 斜面怎么计算机械效率,斜面的机械效率公式是什么
  18. BarTender安装不出现激活页面
  19. 我的世界java版区块显示_我的世界手游区块显示指令分享:区块玩法操作详解[多图]...
  20. Linux_8/ fdisk, xfs_quota, edquota

热门文章

  1. Amos简介及安装步骤
  2. CMMI认证的周期是多久?费用是多少?
  3. 一文弄清传统软件开发与互联网软件开发的异同
  4. 常用Windows快捷键大全
  5. Eclipse安装SVN插件三种方式
  6. java转pdf_Java转PDF(基础)
  7. MVC三层架构详细图
  8. ECSHOP4.0 H5端源码运行环境安装
  9. 网络工程计算机等级,网络工程师题库_计算机等级考试题库_考试资料网
  10. html设置了字体为什么没效果,CSS / HTML代码不起作用,字体未应用