下面程序可指定一连串重复动作,按顺序执行

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Text.RegularExpressions;
using System.Windows.Forms;

namespace Simulator
{

public partial class Form1 : Form
    {

[System.Runtime.InteropServices.DllImport("user32")]
       
        private static extern int mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
        //移动鼠标 
        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;
        //模拟鼠标滚轮滚动操作,必须配合dwData参数
        const int MOUSEEVENTF_WHEEL = 0x0800;

public Form1()
        {
            InitializeComponent();
            
        }
        List<object> EvenList = new List<object>();
        private void Form1_Load(object sender, EventArgs e)
        {
            this.timer1.Enabled = true;
            this.timer1.Interval = 10;

this.timer2.Enabled = true;
            this.timer2.Interval = 20000;
            
        }
        private void button1_Click(object sender, EventArgs e)
        {
            if (button1.Text == "Start")
            {
                if (listBox1.Items.Count == 0)
                {
                    MessageBox.Show("No found event");
                    return;
                }

button1.Text = "Stop";
                Rectangle ScreenArea = System.Windows.Forms.Screen.GetBounds(this);
                int width = ScreenArea.Width;
                int height = ScreenArea.Height;

foreach (object obj in EvenList)
                {
                    dynamic x = ((dynamic)obj).x;
                    dynamic y = ((dynamic)obj).y;
                    dynamic wheel = ((dynamic)obj).dwData;
                    dynamic even = ((dynamic)obj).even;
                    // this.lab_result.Text = x + y + even;
                    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, Convert.ToInt32(x) * 65536 / width, Convert.ToInt32(y) * 65536 / height, 0, 0);//鼠标移动

System.Threading.Thread.Sleep(1000);

if (even == "LeftClick")
                    {
                        // mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,Convert.ToInt32(x)*65536 / 1024, Convert.ToInt32(y)* 65536 / 768, 0, 0);//鼠标移动
                        //mouse_event(MOUSEEVENTF_ABSOLUTE| MOUSEEVENTF_MOVE, Convert.ToInt32(x) * 65536 / width, Convert.ToInt32(y) * 65536 / height, 0, 0);//鼠标移动

//System.Threading.Thread.Sleep(1000);
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        System.Threading.Thread.Sleep(1000);
                    }
                    else if (even == "LeftDoubleClick")
                    {
                        // mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE,Convert.ToInt32(x)*65536 / 1024, Convert.ToInt32(y)* 65536 / 768, 0, 0);//鼠标移动
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        mouse_event(MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        System.Threading.Thread.Sleep(1000);
                    }
                    else if (even == "RightClick")
                    {
                        mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        System.Threading.Thread.Sleep(1000);
                    }
                    else if (even == "RightDoubleClick")
                    {
                        mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        mouse_event(MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
                        System.Threading.Thread.Sleep(1000);
                    }
                    else if (even == "LeftDown")
                    {
                        mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
                        System.Threading.Thread.Sleep(1000);
                    }
                    else if (even == "LeftUp")
                    {
                        mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
                        System.Threading.Thread.Sleep(1000);
                    }
                    else if (even == "MouseWheel")
                    {
                        //
                        // mouse_event( MOUSEEVENTF_WHEEL, 0, 0,2,0);
                        mouse_event(MOUSEEVENTF_WHEEL, 0, 0, Convert.ToInt32(wheel) * 65536 / height, 0);
                    }
                }
                this.lab_result.Text = "Done";
            }
            else
            {
                timer2.Enabled = false;
                button1.Text = "Start";
                lab_result.Text = "";
            }
            
            
        }

private void button2_Click(object sender, EventArgs e)
        {
            if (radio_wheel.Checked == false)
            {
                if (IsInteger(txb_x.Text.Trim()) == false || IsInteger(txb_y.Text.Trim()) == false)
                {
                    MessageBox.Show("Input interger");
                    return;
                }
            }
            
            if (txb_x.Text.Trim() == "")
            {
                txb_x.Text = "0";
                txb_y.Text = "0";
            }
            if (txb_wheel.Text.Trim() == "")
            {
                txb_wheel.Text = "0";
            }

string tmp = "";
            if (radio_left1.Checked == true)
            {
                tmp = "LeftClick";
            }
            else if (radio_left2.Checked == true)
            {
                tmp = "LeftDoubleClick";
            }
            else if (radio_right1.Checked == true)
            {
                tmp = "RightClick";
            }
            else if (radio_right2.Checked == true)
            {
                tmp = "RightDoubleClick";
            }
            else if (radio_leftdown.Checked == true)
            {
                tmp = "LeftDown";
            }
            else if (radio_leftup.Checked == true)
            {
                tmp = "LeftUp";
            }
            else if (radio_wheel.Checked == true)
            {
                tmp = "MouseWheel";
            }

else
            {
                MessageBox.Show("Select a Even");
                return;
            }

object obj = new { x = txb_x.Text.Trim(), y = txb_y.Text.Trim(), dwData = txb_wheel.Text.Trim(),even = tmp};
            EvenList.Add(obj);
            this.listBox1.Items.Add(obj);

txb_x.Text = "";
            txb_y.Text = "";
        }

private void Form1_MouseClick(object sender, MouseEventArgs e)
        {
            
            Point p = new Point(MousePosition.X, MousePosition.Y);
            string x = p.X.ToString();
            string y = p.Y.ToString();

this.label1.Text = "(" + x + "," + y + ")";

}

private void Form1_Click(object sender, EventArgs e)
        {
            string x = Cursor.Position.X.ToString();
            string y = Cursor.Position.Y.ToString();
            this.label1.Text = "(" + x + "," + y + ")";
           
        }

private void timer1_Tick(object sender, EventArgs e)
        {
            string x = Cursor.Position.X.ToString();
            string y = Cursor.Position.Y.ToString();
            this.label1.Text = "(" + x + "," + y + ")";
        }

private void btn_reset_Click(object sender, EventArgs e)
        {
            EvenList.Clear();
            this.listBox1.Items.Clear();
            timer2.Enabled = false;
        }

private void timer2_Tick(object sender, EventArgs e)
        {
            if (this.lab_result.Text == "Done")
            {
                lab_result.Text = "";
                button1_Click(sender, e);
            }

}

public bool IsNumber(string value)
        {
            Regex r = new Regex(@"^/d+(/.)?/d*$");
            return r.IsMatch(value);
        }

public bool IsInteger(string value)
        {
            Regex r = new Regex(@"^\d*$");
            return r.IsMatch(value);
        }

private void btn_saveEven_Click(object sender, EventArgs e)
        {
            
            SaveFileDialog savefileddialog1 = new SaveFileDialog();
            savefileddialog1.Filter = "文本文档(*.txt)|*.txt|所有文件(*.*)|*.*";
            
            
           
            
            if (savefileddialog1.ShowDialog() == DialogResult.OK)
            {
                string filepath = savefileddialog1.FileName;
                
                StreamWriter sw = new StreamWriter(filepath);
                
                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    string str = JsonConvert.SerializeObject(EvenList[i]);
                    sw.WriteLine(str);
                  
                }
                
                
                sw.Flush();
                sw.Close();
                MessageBox.Show("Save Success!");
            }
        }

private void btn_loadEven_Click(object sender, EventArgs e)
        {
            timer2.Enabled = false;
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "txt文件|*.txt";
            open.FilterIndex = 1;
            
            if (open.ShowDialog() == DialogResult.OK)
            {
                this.listBox1.Items.Clear();
                string  filepath = open.FileName;
                StreamReader sr = File.OpenText(filepath);
                string nextline;
                
                while ((nextline = sr.ReadLine()) != null)
                {
                    // this.listBox1.Items.Add(nextline);
                    EvenList.Add(JsonConvert.DeserializeObject(nextline));
                   
                    this.listBox1.Items.Add(nextline);
                }
                sr.Dispose();
                sr.Close();
            }

}

}
}
//MOUSEEVENTF_MOVE:表明发生移动。
//MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
//MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
//MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
//MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
//MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
//MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
//MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出

C#实现键盘鼠标模拟器相关推荐

  1. USB硬件 键盘鼠标控制器 V2.0 支持二次开发

    USB硬件 控制键盘鼠标 V2.0 支持二次开发提供开发包 usb键盘鼠标控制器由来: 听说过"按键精灵"这个软件,就不难理解了;就是这个思路,做一个真正的硬件键盘鼠标,然后我们控 ...

  2. 可二次开发的USB键盘鼠标 Lao-UKM V3.1 (简介 应用举例)

    USB键盘鼠标模拟器简介 用一句话来阐述,就是一个可以2次开发的USB键盘鼠标,硬件如图: 控制命令从左侧的串口进入,经过转化变成标准的USB键盘鼠标操作从右侧输出, USB插入电脑就是标准的键盘鼠标 ...

  3. 模拟键盘鼠标事件有两种方法

    实现一个鼠标或者键盘模拟器,可以完成很多功能,比如做一个简单的游戏外挂^_^.通常,模拟键盘鼠标事件有两种方法: 1.keybd_event, mouse_event 2.SendMessage, P ...

  4. Google Earth键盘/鼠标导航总结

    在 Google 地球中使用键盘/鼠标导航 首先要明白导航过程中的三个中心,视野中心,相机视角,鼠标锁定位置. 还要明白3D视图和俯视图.地平面视图的区别,因为在海拔为0时将进入地平面视图,上下的操作 ...

  5. [转载]C#模拟键盘鼠标事件-SendKeys

    C#模拟键盘鼠标事件-SendKeys 2007-09-18 15:138596人阅读评论(1)收藏举报 1.模拟键盘事件 System.Windows.Forms.SendKeys以下是   Sen ...

  6. FootSwitch脚踏开关:三位USB静音脚踏板脚踏开关脚踏键盘鼠标

    ▌01 脚踏开关 刚刚购买到的 三位USB静音脚踏板脚踏开关脚踏键盘鼠标吃鸡游戏神器脚踩按键 (¥:167)是用于 TEASOFT教学软件 在录制MOOC过程中控制教学内容展开过程.前两天测试了通过 ...

  7. 怎么允许键盘鼠标唤醒计算机,Windows10如何禁止键盘鼠标唤醒电脑?

    Windows10如何禁止键盘鼠标唤醒电脑?只要我们一段时间不操作电脑,电脑就会进入睡眠状态,这时候我们只要动动键盘或鼠标即可唤醒电脑,然而有些用户并不希望使用键盘鼠标来唤醒电脑,那么要如何禁止呢?操 ...

  8. synergy在Windows和Linux下使用全攻略(多台PC共享一套键盘鼠标)

    synergy在Windows和Linux下使用全攻略(多台PC共享一套键盘鼠标) 标签: windowslinuxkeyboard服务器测试 2011-11-26 14:51 6882人阅读 评论( ...

  9. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

最新文章

  1. 热点快评:德国强化AI战略,系统、技术等“多轮并行”
  2. 聚集索引与非聚集索引的总结
  3. mysql 字符串的处理
  4. Choose the best route
  5. https抓包_从Wireshark抓包看HTTPS的加密功能
  6. idea jar包导入_IDEA 实用功能Auto Import:自动优化导包(自动删除、导入包)
  7. Windows server 2016简单部署DNS服务,正向查找和委派
  8. 【JAVASCRIPT】如何不使用jquery函数和ajax框架实现ajax效果
  9. redis 公网ip访问_怎样从公网访问内网Redis数据库
  10. EventBus实现 - 发布订阅 - XML加载
  11. 微信分享 链接地址文档
  12. 划重点!划重点!2022面试必刷461道大厂架构面试真题汇总+面经+简历模板
  13. YUV/YIQ色彩空间的转换
  14. 计算机主板高清图解 清华同方,清华同方bios设定图解
  15. Cmd命令行实验4-ARP
  16. hana经常使用函数
  17. STM32F103CBT6和STM32F103ZET6单片机进行程序移植
  18. 程序员你确定这十个题你都会吗?
  19. 自编高中数学---排列组合公式推导
  20. 别再翻了,大学私藏实用工具/网站全在这里了!

热门文章

  1. 口算小练习(2.1版本)
  2. 2023最新CISP模拟考试题库及答案(一)
  3. ※29. 两数相除(java)
  4. win7系统 经常需要插拔网线才能上网的解决方法
  5. 8万字带你入门Rust
  6. MP3→MP4 根据音乐自动生成视频;入职必备!看看新东家的工作强度;斯坦福大学·计算拓扑学电子书;自监督模型课程;前沿论文 | ShowMeAI资讯日报
  7. 天气预报查询 API 提供个性化的天气服务的设计思路
  8. 大话IT 满大街跑的都是月薪上万的小程序员 zt
  9. PX4环境搭建记录(ROS+Gazebo+mavros+PX4+QGC)
  10. 记一次被挂挖矿脚本的经历