C#使用 WebBrowser制作网页游戏辅助工具关键技术分析
2010-12-15 17:25
453 查看
使用WebBrowser控件,实现起来确实很方便,但灵活性差,比不上直接组包发包。对三国风云这款网页游戏来
说,WebBrowser用的好的话理论上可以实现想要的功能(我只实现了整点自动"举荐名士",
其他就没兴趣实现了,原理都是一
样)。
使用抓包工具,可以查看游戏过程中都有哪些包,自己大概有些了解。
有些网页游戏是Flash界面的,
如校内的开心农场.WebBrowser就不适合做这个游戏的辅助工具。.NET中也有Flash的控件,但这个控件功能很弱,Flash中的很多东西都
得不到。现在想到的办法也只
有原始的组包发包。
WebBrowser有个缺点,它只能存在主线程中。在
webBrowser处理数据过程中,整个程序处在繁忙状态,点击程序会没反应(未响应)。在程序运行过程中尽量减少webBrowser处理数据时间,
除了
webBrowser更新数据,其他的都在其他线程中实现。
webBrowser.Navigate(strURL);
通
过webBrowser可以得到其字符串内容:
webBrowser.Document.Body.InnerHtml;
“游
戏指南”其实就是一个链接:
<A class=topbutton-guide title=游戏指南
href=/"javascript:MM_iframePost('guide.nation');/">游戏指南</A>
只
要在代码中执行“javascript:MM_iframePost('guide.nation');”这个脚本,就相当于用鼠标点击游戏中的“游戏指
南”。
执行脚本可以用HtmlElement.InvokeMember。
...
HtmlElementCollection
aHtml = webBrowser.Document.GetElementsByTagName("a");
DoClick("
游戏指南");
private void DoClick(string name)
{
foreach (HtmlElement h in aHtml)
{
if
(h.InnerText != null && h.InnerText.Contains(name))
{
h.InvokeMember("click");
//等待webBrowser刷新完成
WaitForEventCompleted(1000);
break;
}
else
{
continue;
}
}
}
private
void WaitForEventCompleted(int time)
{
autoResetEvent.Reset();
while
(autoResetEvent.WaitOne(time, false) == false)
{
Application.DoEvents();
}
}
每
次点击相应的链接后,webBrowser都要相应的刷新数据,因此,在操作后都要等待webBrowser更新数据完成。每次更新数据
时,webBrowser_DocumentCompleted event执行的不是一次,
好像是3次,但是找到原因了,现在又
忘记了,代码这里还不稳定,可以抓包研究下原因。
定时执行“举荐名士”,不同线程之间同步使用到DoCallback,
Invoke:
private void TimerDoFamous()
{
while (true)
{
if (DateTime.Now.Second
== 10 && DateTime.Now.Minute == 2)
{
if (webBrowser.InvokeRequired)
{
DoCallback d = new DoCallback(DoFamousGeneral);
this.Invoke(d);
d = new
DoCallback(Wait);
this.Invoke(d);
d = new DoCallback(DoAnotherGeneral);
this.Invoke(d);
}
else
{
DoCallback d = new
DoCallback(DoFamousGeneral);
this.Invoke(d);
d = new DoCallback(Wait);
this.Invoke(d);
d = new
DoCallback(DoAnotherGeneral);
this.Invoke(d);
}
}
}
}
怎
样从webBrowser.Document.Body.InnerHtml中得到自己想要的html
element,用的是正则表达式。同样用正则表达式可以得到当前城镇的所有数据:资源数,建筑等级等。
得到铁矿数量的正则表达
式:
// iron
public const string
IronNowPat = @"<SPAN id=iron_now>/d*</SPAN>";
public
const string IronNowHeader = @"<SPAN id=iron_now>";
public
const string IronIncreasePat = @"id=iron_increase>/d*</SPAN>";
public
const string IronIncreaseHeader = @"id=iron_increase>";
我
测试的帐号是中有一个代管帐号。
现在程序运行的结果是,
点击“button1”立即执行“举荐名士”,自己的帐号做完之后,自动转到代管的帐号做代管帐号的“举荐名士”。我测试用的2个帐号,其中一个是代管帐
号。所以现在的程序只能支
持一个代管帐号,修改成2个原理一样。点击“button2”,在每次电脑时间秒针等于10时,执行“举
荐名士”(定时无限次数)。
转到代管帐号时,会弹出一个含有“确定”的对话框,必须点击“确定”后才能真正转到代管帐号的界面。这
个“确定”按钮是一个含“input” Tag的html element,这个跟“游戏指南”是一个含“a”
Tag的html
element道理一样。
以上谈到的关键点好像能完成三国风云游戏中想要的大部分功能了,只要能想到什么功能。比起组包,发包方便
很多,但效率上 就差很多.
说,WebBrowser用的好的话理论上可以实现想要的功能(我只实现了整点自动"举荐名士",
其他就没兴趣实现了,原理都是一
样)。
使用抓包工具,可以查看游戏过程中都有哪些包,自己大概有些了解。
有些网页游戏是Flash界面的,
如校内的开心农场.WebBrowser就不适合做这个游戏的辅助工具。.NET中也有Flash的控件,但这个控件功能很弱,Flash中的很多东西都
得不到。现在想到的办法也只
有原始的组包发包。
WebBrowser有个缺点,它只能存在主线程中。在
webBrowser处理数据过程中,整个程序处在繁忙状态,点击程序会没反应(未响应)。在程序运行过程中尽量减少webBrowser处理数据时间,
除了
webBrowser更新数据,其他的都在其他线程中实现。
webBrowser.Navigate(strURL);
通
过webBrowser可以得到其字符串内容:
webBrowser.Document.Body.InnerHtml;
“游
戏指南”其实就是一个链接:
<A class=topbutton-guide title=游戏指南
href=/"javascript:MM_iframePost('guide.nation');/">游戏指南</A>
只
要在代码中执行“javascript:MM_iframePost('guide.nation');”这个脚本,就相当于用鼠标点击游戏中的“游戏指
南”。
执行脚本可以用HtmlElement.InvokeMember。
...
HtmlElementCollection
aHtml = webBrowser.Document.GetElementsByTagName("a");
DoClick("
游戏指南");
private void DoClick(string name)
{
foreach (HtmlElement h in aHtml)
{
if
(h.InnerText != null && h.InnerText.Contains(name))
{
h.InvokeMember("click");
//等待webBrowser刷新完成
WaitForEventCompleted(1000);
break;
}
else
{
continue;
}
}
}
private
void WaitForEventCompleted(int time)
{
autoResetEvent.Reset();
while
(autoResetEvent.WaitOne(time, false) == false)
{
Application.DoEvents();
}
}
每
次点击相应的链接后,webBrowser都要相应的刷新数据,因此,在操作后都要等待webBrowser更新数据完成。每次更新数据
时,webBrowser_DocumentCompleted event执行的不是一次,
好像是3次,但是找到原因了,现在又
忘记了,代码这里还不稳定,可以抓包研究下原因。
定时执行“举荐名士”,不同线程之间同步使用到DoCallback,
Invoke:
private void TimerDoFamous()
{
while (true)
{
if (DateTime.Now.Second
== 10 && DateTime.Now.Minute == 2)
{
if (webBrowser.InvokeRequired)
{
DoCallback d = new DoCallback(DoFamousGeneral);
this.Invoke(d);
d = new
DoCallback(Wait);
this.Invoke(d);
d = new DoCallback(DoAnotherGeneral);
this.Invoke(d);
}
else
{
DoCallback d = new
DoCallback(DoFamousGeneral);
this.Invoke(d);
d = new DoCallback(Wait);
this.Invoke(d);
d = new
DoCallback(DoAnotherGeneral);
this.Invoke(d);
}
}
}
}
怎
样从webBrowser.Document.Body.InnerHtml中得到自己想要的html
element,用的是正则表达式。同样用正则表达式可以得到当前城镇的所有数据:资源数,建筑等级等。
得到铁矿数量的正则表达
式:
// iron
public const string
IronNowPat = @"<SPAN id=iron_now>/d*</SPAN>";
public
const string IronNowHeader = @"<SPAN id=iron_now>";
public
const string IronIncreasePat = @"id=iron_increase>/d*</SPAN>";
public
const string IronIncreaseHeader = @"id=iron_increase>";
我
测试的帐号是中有一个代管帐号。
现在程序运行的结果是,
点击“button1”立即执行“举荐名士”,自己的帐号做完之后,自动转到代管的帐号做代管帐号的“举荐名士”。我测试用的2个帐号,其中一个是代管帐
号。所以现在的程序只能支
持一个代管帐号,修改成2个原理一样。点击“button2”,在每次电脑时间秒针等于10时,执行“举
荐名士”(定时无限次数)。
转到代管帐号时,会弹出一个含有“确定”的对话框,必须点击“确定”后才能真正转到代管帐号的界面。这
个“确定”按钮是一个含“input” Tag的html element,这个跟“游戏指南”是一个含“a”
Tag的html
element道理一样。
以上谈到的关键点好像能完成三国风云游戏中想要的大部分功能了,只要能想到什么功能。比起组包,发包方便
很多,但效率上 就差很多.
相关文章推荐
- [z]C#使用WebBrowser制作网页游戏辅助工具关键技术分析
- C#使用WebBrowser制作网页游戏辅助工具关键技术分析
- 使用asp.net与长连接技术制作网页聊天工具(初步)
- 自己做的几个小软件(数学工具和游戏),用C/C#制作,用到许多相关的C#技术细节,可以免费提供下载,感兴趣的,来看一下
- C# : 模拟请求初步应用,制作网页游戏辅助程序(开心网争车位、咬人、买房子、虚拟朋友、礼物)
- c# 利用Log Parser制作简易可视化netmon抓包分析工具
- 使用网页操作助手制作自己的火车票抢票工具
- XNA Game Studio是一套有着强大功能和简单界面的游戏制作平台,游戏开发商和游戏玩家都可以使用这套工具开发针对Windows XP以及Xbox360的游戏,XNA Game Studio分为两种版本,一种是面向初学者的EXPRESS版本,还有一种是面向专业用户的专业版。用户使用EXPRESS版本开发游戏完全免费,并且可以随意在PC上发行,不过用该工具开发的游戏若是在360上网络发行,就需要交纳99美元的年费。
- C# WebBrowser 编程 使用mshtml读取网页内容
- 网络采集软件核心技术剖析系列(4)---使用C#语言如何将html网页转换成pdf(html2pdf)
- 如何快速制作脚本?间隔时间自动使用按键精灵游戏技能辅助脚本
- C#最佳工具集合:IDE、分析、自动化工具等 2017-09-12 16:35:20 分类:DotNet程序员 来自:Sweet Tang,英文原文 C#是企业中广泛使用的编程语言,特别是那些依赖微
- iPhone游戏开发:使用到的工具和技术
- Delphi7 Webbrowser制作网页表单自动提交器按步分析(1)
- C#使用WebBrowser对指定网页截图
- 1.使用WPE工具分析游戏网络封包
- 游戏辅助开发工具—TC、按键、易语言网络验证系统制作
- 黄聪:C#里如何使用WebBrowser获取处理AJAX生成的网页内容?
- Delphi7 Webbrowser制作网页表单自动提交器按步分析(1)
- [Mugeda HTML5技术教程之16]案例分析:制作跨屏互动游戏