日期:2009-12-24  浏览次数:20649 次

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

namespace Win32API_模拟鼠标移动及点击事件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        [System.Runtime.InteropServices.DllImport("user32")]

        ///dwFlags Long,下表中标志之一或它们的组合
        ///dx,dy Long,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置
        ///cButtons Long,没有使用
        ///dwExtraInfo Long,没有使用
        private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);

        //dwFlags常数 意义

        const int MOUSEEVENTF_MOVE = 0x0001;     // 移动鼠标
        const int MOUSEEVENTF_LEFTDOWN = 0x0002;      // 模拟鼠标左键按下
        const int MOUSEEVENTF_LEFTUP = 0x0004;     //  模拟鼠标左键抬起
        const int MOUSEEVENTF_RIGHTDOWN = 0x0008;      // 模拟鼠标右键按下
        const int MOUSEEVENTF_RIGHTUP = 0x0010;      // 模拟鼠标右键抬起
        const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;      // 模拟鼠标中键按下
        const int MOUSEEVENTF_MIDDLEUP = 0x0040;      // 模拟鼠标中键抬起
        const int MOUSEEVENTF_ABSOLUTE = 0x8000;       //标示是否采用绝对坐标


        private void Form1_Load(object sender, EventArgs e)
        {
            //            程序中我们直接调用mouse_event函数就可以了
            //mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);


        }
        //鼠标左键按下和松开两个事件的组合即一次单击
        private void button1_Click(object sender, EventArgs e)
        {
            mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);


        }
        //模拟鼠标右键单击事件
        private void button2_Click(object sender, EventArgs e)
        {
            mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);

        }
        //两次连续的鼠标左键单击事件 构成一次鼠标双击事件
        private void button3_Click(object sender, EventArgs e)