Wow魔兽世界自动登陆器

原创 2006年06月24日 14:10:00

       前一段时间疯狂的迷上了魔兽世界,为之疯狂,但是9c的5区,让多少玩家郁闷啊,守护之剑每天排队800+,还不停地卡机,掉线,本人上班族,每天晚上6点下班回家排队,上线也都8点多了,MC啊,黑E啊,AQL啊等活动早开始了,十分的郁闷!

     为了按时玩游戏,本着将魔兽进行到底的原则,决定开发一个魔兽的自动登陆器,以解决燃眉之急,哈哈!

     首先定义一个类ViaStruct,用来存储游戏的路径,等待时间,以及用户名,密码!

using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
namespace KeyBoardInput
{
    [Serializable]
    public class ViaStruct
    {
        private string timer = "";
        private string filepath = "";
        private string username = "";
        private string pwd = "";
        private string timer2 = "";
        public bool SuccessFlag = false;
        public ViaStruct()
        {
            SuccessFlag=ReadFormKBI();
        }

        #region 属性
        public string Timer
        {
            get { return timer; }
            set { timer = value; }
        }
        public string FilePath
        {
            get { return filepath; }
            set { filepath = value; }
        }
        public string UserName
        {
            get { return username; }
            set { username = value; }
        }
        public string Pwd
        {
            get { return pwd; }
            set { pwd = value; }
        }
        public string Timer2
        {
            get { return timer2; }
            set { timer2 = value; }
        }
        #endregion

        private bool ReadFormKBI()
        {
            StreamReader sr = new StreamReader("info.txt");
            if ((this.filepath = sr.ReadLine()) == null || this.filepath == "")
            {
                return false;
            }
            this.timer = sr.ReadLine();
            this.timer2 = sr.ReadLine();
            this.username = sr.ReadLine();
            this.pwd = sr.ReadLine();
            sr.Close();
            sr.Dispose();
            GC.Collect();
            return true;
        }

        public void WriteToKBI()
        {
            Thread th = new Thread(new ThreadStart(NewMethod));
            th.Start();
        }

        private void NewMethod()
        {
            try
            {
               
                StreamWriter sw = new StreamWriter("info.txt");
                sw.WriteLine(this.filepath);
                sw.Flush();
                sw.WriteLine(this.timer);
                sw.Flush();
                sw.WriteLine(this.timer2);
                sw.Flush();
                sw.WriteLine(this.username);
                sw.Flush();
                sw.WriteLine(this.pwd);
                sw.Flush();
             
                sw.Close();

                MessageBox.Show("写入成功!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
    }
}

 

然后编写Form1窗口

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;


namespace KeyBoardInput
{
   

    public partial class Form1 : Form
    {
        ViaStruct via;
        Thread th;
        Thread ti;
        public Form1()
        {
            InitializeComponent();
            via = new ViaStruct();
        }

      

        private void Form1_Load(object sender, EventArgs e)
        {
            this.textBox1.Text = via.UserName;
            this.textBox2.Text = via.Pwd;
            this.textBox3.Text = via.FilePath;
            this.textBox4.Text = via.Timer2;
            this.comboBox1.Text = via.Timer;
            th = new Thread(new ThreadStart(NewMethod));
            th.Start();
           
          
        }

        private void NewMethod()
        {
            if (via.SuccessFlag)
            {
                try
                {
                    Thread.Sleep(Convert.ToInt32((Convert.ToDecimal(via.Timer) * 60 * 1000)));//开起程序后等待
                                                                                                                                                          //via.Timer时间内启动程序
                    Process.Start(via.FilePath);
                    Thread.Sleep(Convert.ToInt32((Convert.ToDecimal(via.Timer2) * 60 * 1000)));//启动程序后等待                                                                                                                                      //via.Timer2时间输入用户名密码
                }
                catch (Exception ex)
                {
          
                  if(ex.GetType().ToString()!="System.Threading.ThreadAbortException")
                    MessageBox.Show(ex.Message+"1");
                }               
            }
            if (via.SuccessFlag)
            {
                MySendKeys();
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.RestoreDirectory = true;
            if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                this.textBox3.Text = this.openFileDialog1.FileName;
                      
            }
           // MessageBox.Show(Environment.CurrentDirectory);
           
        }

        private void notifyIcon1_DoubleClick(object sender, EventArgs e)
        {
            this.Show();
        }

        private void Form1_MinimumSizeChanged(object sender, EventArgs e)
        {
            this.Visible = false;
        }

        private void MySendKeys()//输入用户名密码
        {
           
            foreach (char ArrayValue in via.UserName.ToCharArray())
            {
                SendKeys.SendWait(ArrayValue.ToString());
                Thread.Sleep(10);
            }
            SendKeys.SendWait("{Tab}");
            foreach (char ArrayValue in via.Pwd.ToCharArray())
            {
                SendKeys.SendWait(ArrayValue.ToString());
                Thread.Sleep(10);
            }
            SendKeys.SendWait("{Enter}");
          
        }

        private void button2_Click(object sender, EventArgs e)//给Via对象赋值
        {
            via.Timer = this.comboBox1.Text;
            via.Timer2 = this.textBox4.Text;
            via.FilePath = this.textBox3.Text;        
            via.UserName = this.textBox1.Text;
            via.Pwd = this.textBox2.Text;
            via.WriteToKBI();          
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)//关闭窗口后推出线程
        {
            if (th.ThreadState != System.Threading.ThreadState.Aborted)
                th.Abort();
            if (ti!=null&&ti.ThreadState !=System.Threading.ThreadState.Aborted)
                ti.Abort();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            th.Abort();
            ti = new Thread(new ThreadStart(PrograssImmediately));
            ti.Start();
        }

        private void PrograssImmediately()
        {
            if (via.SuccessFlag)
            {
                try
                {
                    Process.Start(via.FilePath);
                    Thread.Sleep(Convert.ToInt32((Convert.ToDecimal(via.Timer2) * 60 * 1000)));
                }
                catch (Exception ex)
                {
                    //MessageBox.Show(ex.GetType().ToString());
                    if (ex.GetType().ToString() != "System.Threading.ThreadAbortException")
                        MessageBox.Show(ex.Message + "1");
                }
            }
            if (via.SuccessFlag)
            {
                MySendKeys();
            }
        }  

    }
}

把改程序的快捷方式拷入启动里,让其成为开机自启动程序

程序在VS2005 WinXp系统下测试成功!

 

局限性:

1.需要主板BIOS支持自动开机;

2.开机以后电脑就连在互连网上;

3.需要.net framework2.0的支持

魔兽世界的登陆服务器设计

特别声明:  本人非常欣赏暴雪及他们的游戏,之所以写这个文章,是想让大家了解一些网络封包分析方面的常见方法以及学习暴雪游戏在网络处理方面的经验,偶认为作为一个网络编程者,熟练掌握封包分析的工具和方法应...
  • caisini_vc
  • caisini_vc
  • 2009年08月23日 12:46
  • 3095

wow插件的构成

今天来说一说wow插件是个什么鬼?插件是魔兽世界开放的第三个接口,有朋友会问,什么是第三方?这个是软件业的一个术语,简单的说,就是游戏当中能让我们自己来定制DIY的部分,比方说对话界面,还有一些数据显...
  • jianin45
  • jianin45
  • 2016年08月25日 11:21
  • 1081

开源的魔兽世界参考架构——mangos

开源社区常常有很多出人意表的项目,让人往往击节叹赏。例如当年在普通PC电脑上虚拟运行苹果机系统的Pearpc。把微软游戏机xbox改装成家庭影音中心的xbox-media center,以及在ipod...
  • kenkao
  • kenkao
  • 2010年07月28日 08:26
  • 14034

魔兽世界 在洞里很暗怎么办。

游戏里暗游戏外不暗那说明不是显示器的问题。那就是显卡的问题喽。 右键-显卡控制面板-3D设置-管理3D设置-程序设置-选择自定义的程序(选择魔兽世界 64位)。 然后找到-环境光吸收-打开它就好了。...
  • why1happy
  • why1happy
  • 2016年08月01日 13:15
  • 238

Wow 服务器解析(一)

http://www.cppblog.com/Jedimaster/archive/2006/10/14/13674.aspx  Wow 服务器解析(一)      ...
  • romandion
  • romandion
  • 2009年09月11日 17:19
  • 4678

魔兽世界MPQ加载顺序

===================================================================== 未经本人许可 任何网站、团体、个人不得以任何方式转载本文 ...
  • jeffreyzhuang
  • jeffreyzhuang
  • 2010年02月24日 18:08
  • 5375

魔兽世界私服Trinity,从源码开始

缘起因由 在一个无所事事的周末下午,突然想起魔兽世界,官方的账号很久没有上了,里面的大小号现在连满级都不是。以前曾经搭过传奇和星际争霸战网的私服自娱自乐,也听说过魔兽世界有开源的服务端模拟,既然...
  • mysouling
  • mysouling
  • 2016年05月08日 02:49
  • 4813

魔兽世界的时间戳timestamp问题

最近在研究魔兽战网API, 发现个有意思的地方 在魔兽战网API返回的jsion数据中,常常有"timestamp":1392787740000这些数据, 不过安时间戳的计算出来时间却是: 46105...
  • myths_0
  • myths_0
  • 2014年02月20日 16:12
  • 979

魔兽世界-按键精灵脚本(1)-自动小宠物战斗

这个脚本主要是为了练低级宝宝 // 4,3 --> 换出宝宝 changePet 3 wait_round // 4,1 --> 换出满级猫 changePet 1 wait_round // ...
  • u012577500
  • u012577500
  • 2013年12月18日 00:16
  • 1772

关于wow游戏插件制作之前的几件事

如果你是一个游戏迷,或者说魔兽世界迷,那么你一定不会对插件这个东西感觉到陌生;如果你是一个用代码写人生的家伙,那么你一定要接触一下Lua这门语言;如果你只是对魔兽插件表示好奇,那么请保持这种好奇的态度...
  • jianin45
  • jianin45
  • 2016年08月08日 15:29
  • 2158
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Wow魔兽世界自动登陆器
举报原因:
原因补充:

(最多只允许输入30个字)