C#实现键盘鼠标模拟器

这篇具有很好参考价值的文章主要介绍了C#实现键盘鼠标模拟器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

c# 模拟鼠标点击,c#,计算机外设,开发语言

 

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给出文章来源地址https://www.toymoban.com/news/detail-559345.html

到了这里,关于C#实现键盘鼠标模拟器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android开发:(AndroidStudio模拟器)如何将模拟器语言设置为中文 && 模拟器输入法更改为中文输入 && 键盘输入中文

    将模拟器语言设置为中文 第一步:打开模拟器后,上滑打开下面的设置图标。 第二步:找到 System (系统) ,点击进入。 第三步:进入后,找到language(语言),点击进入。 第四步:选择 + 添加语言(add) 第五步:滑到最底部,找到中文简体并选中。然后长按中文简体,直到

    2024年02月04日
    浏览(60)
  • 微信开发者工具模拟器中不显示鼠标问题

    前言 在使用微信开发者工具开发微信小程序时,使用到了第二屏幕,在第一屏幕上,微信开发者工具模拟器中,可以正常显示鼠标,而在第二屏幕上不显示鼠标。 解决方案: 方案1:设置指针轨迹:控制面板➡鼠标➡指针选项➡勾拳显示指针轨迹 。如下图所示: 这样方案的

    2024年02月12日
    浏览(69)
  • C# 实现按键精灵 记录录制键盘鼠标

     是一个非常实用的键盘鼠标脚本录制工具,通过它你可以轻松地进行脚本录制,简单易用,不需要任何编程知识就能做出功能强大的脚本,只要你在电脑前用双手可以完成的动作,都可以替你完成。                下载软件 1.运行录制脚步时模拟过程 比按键精灵 更加流畅

    2024年02月11日
    浏览(39)
  • C# 实现全局鼠标钩子操作以及发送键盘事件

    全局钩子定义 winfrom窗体代码: 效果截图:

    2024年02月05日
    浏览(44)
  • C#使用SnsSharp实现鼠标键盘钩子,实现全局按键响应

    CSDN下载地址:https://download.csdn.net/download/sns1991sns/88041637 gitee下载地址:https://gitee.com/linsns/snssharp 一、键盘事件,使用 SnsKeyboardHook 按键事件共有3个:         KeyDown (按键按下)                 KeyUp (按键松开)                  KeyPress (按键按下并松开) 以

    2024年02月14日
    浏览(43)
  • python 模拟鼠标,键盘点击

    https://www.cnblogs.com/tobe-goodlearner/p/tutorial-pynput.html 信息爆炸 可用于抢红包,直播点击爱心,等等需要点击操作的应用场景

    2024年02月11日
    浏览(58)
  • C# Windows登录界面进行截图,控制鼠标键盘等操作实现(三)

    在Windows登录界面进行截图,目前尝试到的以下的截图方法可以截取到图,其它的方式要么卡住,要么截出来是黑屏的,直接上代码: 操作鼠标键盘等操作可以参考本人另一篇文章:使用C#制作可以录制自动化执行Windows操作脚本工具——类似于按键精灵 - log9527 - 博客园 (cnbl

    2024年02月12日
    浏览(38)
  • C# Windows登录界面进行截图,控制鼠标键盘等操作实现(二)

    上一篇:C# Windows登录界面进行截图,控制鼠标键盘等操作实现(一) - log9527 - 博客园 (cnblogs.com) 我们了解了要实现在Windows登录界面进行截图等操作必须满足的条件,这一篇我们主要通过代码实现这些条件。 首先先建一个项目A 下面一些windows自带非托管dll的调用类。 外部调用

    2024年02月12日
    浏览(39)
  • 人生重开模拟器(Python实现)

    人生重开模拟器是由VickScarlet上传至GitHub的一款简单的文字网页游戏。 玩家点击“立即重开”并设置角色的初始属性后,程序就会随机为玩家生成对应的人生经历。 下面我们实现一个简化版的人生重开模拟器,主要目的在于熟悉Python的语法。 初始界面可以自由发挥,这里博

    2024年02月02日
    浏览(51)
  • 通过模拟器实现APP抓包

    本教程将跳过工具安装部分,请正确食用 😉 我的环境: 操作系统:win11 模拟器版本:雷电安卓模拟器稳定版-安卓7.1(32位) V5.0.46 抓包工具:Wireshark-Version 4.0.1 抓包工具:charles-Version 4.6.3 工具安装地址: 雷电安卓模拟器👈点击跳转官网地址下载 Wireshark👈点击跳转官网地址

    2024年02月02日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包