【全文】
前一段时间疯狂的迷上了魔兽世界,为之疯狂,但是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的支持
来源:http://blog.csdn.net/firestone2003/archive/2006/06/24/829316.aspx#464431
用这个 System.Windows.Forms.SendKeys.Send(); 就是模拟键盘
下面是一些特殊符号的键盘值
System.Windows.Forms.SendKeys.Send("+="); //值+
System.Windows.Forms.SendKeys.Send("+9"); //值(
System.Windows.Forms.SendKeys.Send("+8"); //值*
System.Windows.Forms.SendKeys.Send("+7"); //值&
System.Windows.Forms.SendKeys.Send("+6"); //值^
System.Windows.Forms.SendKeys.Send("+5"); //值%
System.Windows.Forms.SendKeys.Send("+4"); //值$
System.Windows.Forms.SendKeys.Send("+3"); //值#
System.Windows.Forms.SendKeys.Send("+2"); //值@
System.Windows.Forms.SendKeys.Send("+1"); //值!
System.Windows.Forms.SendKeys.Send("+0"); //值)
System.Windows.Forms.SendKeys.Send("+`"); //值~
下面是常用的值
代表的键 |
指定值 KeyLabelName
|
←
|
LEFTARROW
|
→
|
RIGHTARROW
|
↑
|
UPARROW
|
↓
|
DNARROW
|
HOME
|
HOME
|
END
|
END
|
PAGE UP
|
PGUP
|
PAGE DOWN
|
PGDN
|
DEL
|
DEL
|
BACKSPACE
|
BACKSPACE
|
SPACEBAR
|
SPACEBAR
|
INS
|
INS
|
TAB
|
TAB
|
SHIFT+TAB
|
BACKTAB
|
Left Brace
|
LBRACE
|
Right Brace
|
RBRACE
|
ENTER
|
ENTER
|
F1 to F12
|
F1, F2, F3 ...
|
CTRL+F1 to CTRL+F12
|
CTRL+F1, CTRL+F2 ...
|
SHIFT+F1 to SHIFT+F12
|
SHIFT+F1, SHIFT+F2 ...
|
ALT+F1 to ALT+F12
|
ALT+F1, ALT+F2, ALT+F3 ...
|
ALT+0 to ALT+9
|
ALT+0, ALT+1, ALT+2 ...
|
ALT+A to ALT+Z
|
ALT+A, ALT+B, ALT+C ...
|
CTRL+LEFT ARROW
|
CTRL+LEFTARROW
|
CTRL+RIGHT ARROW
|
CTRL+RIGHTARROW
|
CTRL+HOME
|
CTRL+HOME
|
CTRL+END
|
CTRL+END
|
CTRL+PAGE UP
|
CTRL+PGUP
|
CTRL+PAGE DOWN
|
CTRL+PGDN
|
CTRL+A TO CTRL+Z
|
CTRL+A, CTRL+B, CTRL+C ...
|
CTRL+0
|
CTRL+0
|
RIGHT MOUSE BUTTON
|
RIGHTMOUSE
|
LEFT MOUSE BUTTON
|
LEFTMOUSE
|
MOUSE BUTTON
|
MOUSE
|
ESC
|
ESC
|
来源:http://bbs.bc-cn.net/dispbbs.asp?boardid=117&id=140452
|
请发表评论