用C#打造"QQ对战平台挤房器"

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

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

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

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

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

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

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

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

1)、点击房间。

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

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

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

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

1、点击房间:

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

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

定义原型如下:

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

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

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

定义原型如下:

[DllImport("user32.dll", EntryPoint = "mouse_event")]
public static extern void mouse_event(
    int dwFlags,
    int dx,
    int dy,
    int dwData,
    int dwExtraInfo
);

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

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

Point point;

if(Win32API.GetCursorPos(out point)){

//MouseAPI是对mouse_event API函数的一个简单封装。

MouseAPI.SendMouseEvent(MouseAPI.MouseEvents.LeftButtonDown | MouseAPI.MouseEvents.LeftButtonUp, point, true);

}

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

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

这里需要使用的API有:

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

定义原型如下:

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

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

定义原形如下:

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

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

if (Win32API.GetCursorPos(out point)){ hwnd = Win32API.WindowFromPoint(point); if (hwnd != IntPtr.Zero) { string className = Win32API.GetWindowClassName(hwnd); if (className.Equals("Afx:400000:3")) { MouseAPI.SendMouseEvent(MouseAPI.MouseEvents.LeftButtonDown | MouseAPI.MouseEvents.LeftButtonUp, point, true); } }}这样“点击房间”这步就可以算完美了,当鼠标不在房间(正确的说不在游戏大厅)上停留时,鼠标也不会乱点,这就方便在“挤房间”时随时可以切换窗口了。

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

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

//判断鼠标是否停留在聊天窗口上if (Win32API.GetCursorPos(out point)){ hwnd = Win32API.WindowFromPoint(point); if (hwnd != IntPtr.Zero) { string className = Win32API.GetWindowClassName(hwnd); if (className.Equals("RichEdit20A") || className.Equals("Afx:44a0000:0")) { isOk = true; } }}

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

2)关闭提示窗口:

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

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

它的定义原形:

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

B、FindWindowEx : 查找某个窗口

它的定义原型:

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

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

最后代码如下:

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

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

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

以下提供程序下载(不提供源码,但你可以对其反编译查看):

/Files/kingthy/QQBattleThruster.rar

时间: 2024-10-26 19:26:02

用C#打造"QQ对战平台挤房器"的相关文章

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

下载:QQ对战平台挤房器 处女作,有什么建议联系我QQ290387340

解决11对战平台无法登陆的方法

现在11对战平台是一个新兴电子竞技对战平台,类似于浩方,QQ对战平台,是为了提供单机游戏进行联机操作的竞技平台,由于支持很多热门的单机游戏进行联机操作,有时会遇到11对战平台无法登陆,下面教大家解决11对战平台无法登陆的方法. 解决11对战平台无法登陆具体解决方法如下: 1.请先检查您的网络是否处于连接状态,能否正常上网. 2.在登陆界面查看服务器选择是否正确,如果正确可能您所选择的登陆点比较繁忙,建议您更换为备用登陆点. 3.平台完整性问题:有时候我们下载的客户端平台并不完整,以至于安装之后出

浩方电竞对战平台常见问题

  浩方电竞对战平台常见问题及解决方法: Q:如何获取新平台账号? A:目前新浩方对战平台账号已开放注册,您可登陆www.bianfeng.com 进行注册,如您之前已使用浩方,您可直接用原来账号进行登录. Q:如何开始游戏? A:新浩方有三种开始游戏方式. 1.当您登录平台后,左侧将会推荐目前浩方最主流的几款游戏,您可直接点击左侧游戏栏快速开始游戏,并且再您进行过游戏后,左侧游戏栏将会进行记录方便您下一次快速进行游戏. 2.您可在新浩方平台主画面中浏览到新浩方所有游戏,并点击图标上的开始游戏进

11对战平台无法登陆怎么办

  解决11对战平台无法登陆具体解决方法如下: 1.请先检查您的网络是否处于连接状态,能否正常上网. 2.在登陆界面查看服务器选择是否正确,如果正确可能您所选择的登陆点比较繁忙,建议您更换为备用登陆点. 3.平台完整性问题:有时候我们下载的客户端平台并不完整,以至于安装之后出现各种问题,最好是官网去下载正规的版本,然后进行安装,或许问题就会迎刃而解. 4.打补丁也是引起问题的一个原因,很多客户端在打了补丁之后出现这样那样的问题,我们在打补丁之前最好先坐下备份,如果打完补丁之后出现问题及时还原即可

关于游戏对战平台的设计的疑问

问题描述 关于游戏对战平台的设计的疑问 我想做一个游戏对战平台,跟浩方,11对战平台那种类似,想实现网页版和客服端版俩个版本,客户端版的设计毫无思路,因为一直没做过这种客服端版的项目,网页版的我觉得还好实现.想问问各位大神,客服端版的这种对战平台应该怎么设计,用java语言能实现么?平台应该怎么构建?怎么去链接到相关的游戏?

有人用java写过挤房器吗

问题描述 如题,例如对战平台之类的,用java语言实现的,有源码麻烦借我参考下 解决方案 解决方案二:挤房器?是嘛呀?解决方案三:挤乳房的器具?!解决方案四:什么意思解决方案五:啊~~什么跟什么嘛解决方案六:新生不熟啊......解决方案七:#2楼回复于:2010-08-1123:34:48挤乳房的器具?!太有才了...解决方案八:引用1楼bao110908的回复: 挤房器?是嘛呀? 铺助外挂...解决方案九:不知道楼主要的是天然的模拟发送鼠标动作,还是用人家的漏洞啊..解决方案十:模拟鼠标动作

[重要]使用Vitamio打造自己的Android万能播放器(10)—— 本地播放 (缩略图、视频信息、视频扫描服务)

前言 Vitamio是我们团队的诚意之作,除了要将VPlayer打造成Android最好的播放器,也要将Vitamio打造成Android最好的播放器组件.新版发布内测SDK虽然还有一些问题,但已经具备高可扩展性.便捷性和许多内置实用的功能,后续文章将继续深挖和介绍Vitamio的使用细节和方法.本章将提供显示缩略图.视频大小等视频信息,并介绍使用Vitamio内置的ContentProvider以及文件扫描服务.   注意 本章ContentProvider在2012-8-31发布的SDK中已

使用Vitamio打造自己的Android万能播放器(8)——细节优化

前言 成功的产品往往在细节之处也做到极致,产品和项目从使用的角度来看最大的区别我认为也就是细节的处理上.开播视频的目标是产品,前面7篇文章高歌猛进,添加了很多的功能,也该停下来休整一下,优化一下,也欢迎交流反馈做得不周到的地方.由于开源,大家也可以按照自己的喜好来添加修改不同的功能和细节.   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com    系列 1.使用Vitamio打造自

使用Vitamio打造自己的Android万能播放器(7)——在线播放(下载视频)

前言 本章将实现非常实用的功能--下载在线视频.涉及到多线程.线程更新UI等技术,还需思考产品的设计,如何将新加的功能更好的融入到现有的产品中,并不是简单的加一个界面就行了,欢迎大家交流产品设计和技术细节实现!   声明 欢迎转载,但请保留文章原始出处:)  博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com    系列 1.使用Vitamio打造自己的Android万能播放器(1)--准备 2.使用Vitamio打造自己的An