程序场景:
1.新建了一窗体Test.
2.窗体里有两个Button控件:button_Start,button_Stop
  button_Start功能:
3.全局变量class Test:Form
{
public Test()
{
initializeComponent();
button_Stop.Enable=false;
}
Thread controlThread;//线程处理函数
private void ThreadRunMethod()
{
 while(true)
 {
  //我主要想知道的是:这里写让鼠标自动点击一下左键的处理代码怎么写
  
  //时间间隔1000毫秒
  Thread.Sleep(1000);
 }
}private void button_Start_Click(object sender,EventArgs e)
{
 //这里写执行让鼠标自动点击左键.点击的时间间隔为1000毫秒
 
 button_Stop.Enable=true;
 button_Start.Enable=false;
}
private void button_Stop_Click(object sender,EventArgs e)
{
 //这里写让鼠标自动点击左键的线程停止
 
 button_Start.Enable=true;
 button_Stop.Enable=false;
}
}框架给出了.
就是差怎么让鼠标自动点击鼠标左键的处理代码.
希望朋友们帮一下,谢谢.

解决方案 »

  1.   

    用Mouse_event()来控制鼠标操作
    [System.Runtime.InteropServices.DllImport("user32")] 
    private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); http://sprucehurst.spaces.live.com/Blog/cns!DF4D223E7CB678B8!198.entry
      

  2.   

    发表于:2008-09-23 16:09:4626楼 得分:15 
    代码测试通过,分数拿来 
    你需要点一下Button1才会自动点击(20,40)这个点。 
    你可以再修改,用输入框来决定点哪个点。这样总比放在窗体的Load事件里强。 
    不懂接着问。 
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;namespace 点击
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        [DllImport("User32")]
            public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);        [DllImport("User32")]
            public extern static void SetCursorPos(int x, int y);        [DllImport("User32")]
            public extern static bool GetCursorPos(out POINT p);        [StructLayout(LayoutKind.Sequential)]
            public struct POINT
            {
                public int X;
                public int Y;
            }        public enum MouseEventFlags
            {
                Move = 0x0001,
                LeftDown = 0x0002,
                LeftUp = 0x0004,
                RightDown = 0x0008,
                RightUp = 0x0010,
                MiddleDown = 0x0020,
                MiddleUp = 0x0040,
                Wheel = 0x0800,
                Absolute = 0x8000
            }        private void AutoClick(int x, int y)
            {
                POINT p = new POINT();
                GetCursorPos(out p);
                try
                {
                    SetCursorPos(x, y);
                    mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
                    mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
                }
                finally
                {
                    SetCursorPos(p.X, p.Y);
                }
            }        private void button1_Click(object sender, EventArgs e)
            {
                AutoClick(20, 40);
            }
        }
    }
     
      

  3.   


    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;namespace test.AutoClickMouseLeftButton
    {
        public partial class AutoClickMouseLeftButton : Form
        {
            public AutoClickMouseLeftButton()
            {
                InitializeComponent();
                System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
                LB_Numbers.Text = ClickCount.ToString();
            }        //存放着鼠标左键点击次数
            int ClickCount = 0;        Thread controlThread;        private void ThreadRunMethod()
            {
                while (true)
                {
                    this.BT_Start.PerformClick();
                    Thread.Sleep(1000);
                }
            }        private void BT_TestClick_Click(object sender, EventArgs e)
            {
                ClickCount++;
                LB_Numbers.Text = ClickCount.ToString();
            }        private void BT_Start_Click(object sender, EventArgs e)
            {
                try
                {
                    controlThread = new Thread(new ThreadStart(ThreadRunMethod));
                    controlThread.Start();
                }
                catch (Exception)
                {
                    Application.DoEvents();
                }
                BT_Stop.Enabled = true;
                BT_Start.Enabled = false;
            }        private void BT_Stop_Click(object sender, EventArgs e)
            {
                try
                {
                    if (controlThread != null)
                        controlThread.Abort();
                }
                catch (Exception)
                {
                    Application.DoEvents();
                }
                BT_Start.Enabled = true;
                BT_Stop.Enabled = false;
            }
        }
    }
    以上是窗体主要代码以下是窗体初化始代码:namespace test.AutoClickMouseLeftButton
    {
        partial class AutoClickMouseLeftButton
        {
            /// <summary>
            /// 必需的设计器变量。
            /// </summary>
            private System.ComponentModel.IContainer components = null;        /// <summary>
            /// 清理所有正在使用的资源。
            /// </summary>
            /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
            protected override void Dispose(bool disposing)
            {
                if (disposing && (components != null))
                {
                    components.Dispose();
                }
                base.Dispose(disposing);
            }        #region Windows 窗体设计器生成的代码        /// <summary>
            /// 设计器支持所需的方法 - 不要
            /// 使用代码编辑器修改此方法的内容。
            /// </summary>
            private void InitializeComponent()
            {
                this.BT_TestClick = new System.Windows.Forms.Button();
                this.label1 = new System.Windows.Forms.Label();
                this.LB_Numbers = new System.Windows.Forms.Label();
                this.BT_Start = new System.Windows.Forms.Button();
                this.BT_Stop = new System.Windows.Forms.Button();
                this.SuspendLayout();
                // 
                // BT_TestClick
                // 
                this.BT_TestClick.Location = new System.Drawing.Point(14, 51);
                this.BT_TestClick.Name = "BT_TestClick";
                this.BT_TestClick.Size = new System.Drawing.Size(115, 23);
                this.BT_TestClick.TabIndex = 0;
                this.BT_TestClick.Text = "TestClickHere";
                this.BT_TestClick.UseVisualStyleBackColor = true;
                this.BT_TestClick.Click += new System.EventHandler(this.BT_TestClick_Click);
                // 
                // label1
                // 
                this.label1.AutoSize = true;
                this.label1.Location = new System.Drawing.Point(12, 9);
                this.label1.Name = "label1";
                this.label1.Size = new System.Drawing.Size(137, 12);
                this.label1.TabIndex = 1;
                this.label1.Text = "当前鼠标左键点击次数:";
                // 
                // LB_Numbers
                // 
                this.LB_Numbers.AutoSize = true;
                this.LB_Numbers.Location = new System.Drawing.Point(156, 8);
                this.LB_Numbers.Name = "LB_Numbers";
                this.LB_Numbers.Size = new System.Drawing.Size(47, 12);
                this.LB_Numbers.TabIndex = 2;
                this.LB_Numbers.Text = "Numbers";
                // 
                // BT_Start
                // 
                this.BT_Start.Location = new System.Drawing.Point(14, 189);
                this.BT_Start.Name = "BT_Start";
                this.BT_Start.Size = new System.Drawing.Size(200, 23);
                this.BT_Start.TabIndex = 3;
                this.BT_Start.Text = "StartAutoClickMouseLeftButton";
                this.BT_Start.UseVisualStyleBackColor = true;
                this.BT_Start.Click += new System.EventHandler(this.BT_Start_Click);
                // 
                // BT_Stop
                // 
                this.BT_Stop.Location = new System.Drawing.Point(14, 218);
                this.BT_Stop.Name = "BT_Stop";
                this.BT_Stop.Size = new System.Drawing.Size(200, 23);
                this.BT_Stop.TabIndex = 4;
                this.BT_Stop.Text = "StopAutoClickMouseLeftButton";
                this.BT_Stop.UseVisualStyleBackColor = true;
                this.BT_Stop.Click += new System.EventHandler(this.BT_Stop_Click);
                // 
                // AutoClickMouseLeftButton
                // 
                this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
                this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
                this.ClientSize = new System.Drawing.Size(423, 266);
                this.Controls.Add(this.BT_Stop);
                this.Controls.Add(this.BT_Start);
                this.Controls.Add(this.LB_Numbers);
                this.Controls.Add(this.label1);
                this.Controls.Add(this.BT_TestClick);
                this.Name = "AutoClickMouseLeftButton";
                this.Text = "AutoClickMouseLeftButton";
                this.ResumeLayout(false);
                this.PerformLayout();        }        #endregion        private System.Windows.Forms.Button BT_TestClick;
            private System.Windows.Forms.Label label1;
            private System.Windows.Forms.Label LB_Numbers;
            private System.Windows.Forms.Button BT_Start;
            private System.Windows.Forms.Button BT_Stop;
        }
    }
    以上是窗体是用两个Lable:lable1,LB_Numbers,
    三个Button:BT_TestClick,BT_Start,BT_Stop.图片:
    我主要是想实现当我点击BT_Start按钮之后,鼠标就开始隔1000毫秒点一次鼠标左键.这样当我把鼠标移动BT_TestClick按钮后,就自动点BT_TestClick按钮,如果代码来控制击点生效了,那么LB_Numbers会显示当前鼠标点击次数会+1.但是楼上那位朋友的PerformClick()生成事件没有达到我想要的效果.
      

  4.   

    谢谢了.我把我的代码和三楼的代码合成了.
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;
    using System.Runtime.InteropServices;namespace test.AutoClickMouseLeftButton
    {
        public partial class AutoClickMouseLeftButton : Form
        {
            [DllImport("User32")]
            public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);        [DllImport("User32")]
            public extern static void SetCursorPos(int x, int y);        [DllImport("User32")]
            public extern static bool GetCursorPos(out POINT p);        [StructLayout(LayoutKind.Sequential)]
            public struct POINT
            {
                public int X;
                public int Y;
            }        public enum MouseEventFlags
            {
                Move = 0x0001,
                LeftDown = 0x0002,
                LeftUp = 0x0004,
                RightDown = 0x0008,
                RightUp = 0x0010,
                MiddleDown = 0x0020,
                MiddleUp = 0x0040,
                Wheel = 0x0800,
                Absolute = 0x8000
            }        private void AutoClick(int x, int y)
            {
                POINT p = new POINT();
                GetCursorPos(out p);
                try
                {
                    SetCursorPos(x, y);
                    mouse_event((int)(MouseEventFlags.LeftDown | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
                    mouse_event((int)(MouseEventFlags.LeftUp | MouseEventFlags.Absolute), 0, 0, 0, IntPtr.Zero);
                }
                finally
                {
                    SetCursorPos(p.X, p.Y);
                }
            }
            //构造函数
            public AutoClickMouseLeftButton()
            {
                InitializeComponent();
                System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
                LB_Numbers.Text = ClickCount.ToString();
            }
            //存放着当前鼠标的位置坐标
            Point CursorPosition = new Point(0, 0);        //存放着鼠标左键点击次数
            int ClickCount = 0;
            //主线控制程对象
            Thread controlThread;
            //线程主要处理的函数
            private void ThreadRunMethod()
            {
                while (true)
                {
                    //this.BT_Start.PerformClick();
                    CursorPosition = Cursor.Position;
                    AutoClick(CursorPosition.X, CursorPosition.Y);
                    Thread.Sleep(1000);
                }
            }        private void BT_TestClick_Click(object sender, EventArgs e)
            {
                ClickCount++;
                LB_Numbers.Text = ClickCount.ToString();
            }        private void BT_Start_Click(object sender, EventArgs e)
            {
                try
                {
                    controlThread = new Thread(new ThreadStart(ThreadRunMethod));
                    controlThread.Start();
                }
                catch (Exception)
                {
                    Application.DoEvents();
                }
                BT_Stop.Enabled = true;
                BT_Start.Enabled = false;
            }        private void BT_Stop_Click(object sender, EventArgs e)
            {
                try
                {
                    if (controlThread != null)
                        controlThread.Abort();
                }
                catch (Exception)
                {
                    Application.DoEvents();
                }
                BT_Start.Enabled = true;
                BT_Stop.Enabled = false;
            }
        }
    }