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

  • 相关阅读:
    蒲公英
    大神-YY
    iOS开发精选知识点讲解 - 视频等 iOSStrongDemo是由@李刚维护,总结一些iOS开发精选知识点。每一个知识点都有相应的测试代码,非常适合iOS初学者。
    iOS开发UI篇—懒加载
    iOS开发UI篇—UITableviewcell的性能优化和缓存机制
    iOS开发UI篇—UITableview控件基本使用
    iOS开发UI篇—UITableview控件简单介绍
    iOS — Autolayout之Masonry解读
    iOS开发UI篇—多控制器和导航控制器简单介绍
    iOS开发网络篇—数据缓存
  • 原文地址:https://www.cnblogs.com/yangxiaohu1/p/1233790.html
Copyright © 2011-2022 走看看