zoukankan      html  css  js  c++  java
  • c#中模拟键盘(转)

    【全文】
          前一段时间疯狂的迷上了魔兽世界,为之疯狂,但是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

  • 相关阅读:
    ASP.NET 表单验证 Part.1(理解表单验证)
    Silverlight 简介 Part.3(设计 Siverlight 页面)
    ASP.NET 成员资格 Part.3(LoginStatus、LoginView、PasswordRecovery)
    ASP.NET 网站部署 Part.1(安装IIS、复制文件部署网站)
    ASP.NET Dynamic Data Part.1(创建动态数据应用程序)
    ASP.NET 安全模型 Part.2(SSL)
    ASP.NET MVC Part.2(扩展基本的 MVC 应用程序)
    ASP.NET 网站部署 Part.2(使用 Web 部署)
    开发高级 Web 部件
    创建 Web 部件(WebPart 类、简单的 Web 部件)
  • 原文地址:https://www.cnblogs.com/yangxiaohu1/p/1233790.html
Copyright © 2011-2022 走看看