C#中实现模拟鼠标事件

C#中实现模拟鼠标事件

注 :这段代码是有点问题,当时调试没注意。

其实主要是展示一下

[DllImport(“user32.dll”)]

static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);

的用法,在这段代码中由于button1一直有焦点MainForm_KeyDown运行不了。然而我用了别的方法触发mouse_event结果没执行button1的点击事件。这个我再研究下。

鼠标自动运行事件在程序中也会用到的。它的原理是调用user32.dll的方法运行。
下面的代码是鼠标自动点击事件的一个例子。
新建一个c#窗体工程,在窗口上拖入一个button,注册button的鼠标点击事件。如下:

C#中实现模拟鼠标事件

    public partial class MainForm : Form      {          public MainForm()          {              InitializeComponent();          }          private void button1_Click(object sender, EventArgs e)          {              MessageBox.Show("Button1点击事件!");          }        }

添加一个类,用来调用user32.dll的mouse_event方法:

   public class MouseFlag      {          [DllImport("user32.dll")]            static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);            [Flags]          enum MouseEventFlag : uint          {              Move = 0x0001,              LeftDown = 0x0002,              LeftUp = 0x0004,              RightDown = 0x0008,              RightUp = 0x0010,              MiddleDown = 0x0020,              MiddleUp = 0x0040,              XDown = 0x0080,              XUp = 0x0100,              Wheel = 0x0800,              VirtualDesk = 0x4000,              Absolute = 0x8000          }          public static  void MouseLefDownEvent(int dx, int dy, uint data)          {              mouse_event(MouseEventFlag.LeftDown,dx, dy, data, UIntPtr.Zero);          }      }

 测试如下:
 在窗体中加一个KeyDown事件,并调用自动点击的方法。

     public partial class MainForm : Form      {          public MainForm()          {              InitializeComponent();          }            private void button1_Click(object sender, EventArgs e)          {              MessageBox.Show("Button1点击事件!");          }            private void MainForm_KeyDown(object sender, KeyEventArgs e)          {              MouseFlag.MouseLefDownEvent(this.button1.Location.X, this.button1.Location.Y,0);          }        }

运行后,窗口有焦点的情况下按键盘的键,会触发button的click事件,如图:
 C#中实现模拟鼠标事件

 

 

你还可能感兴趣:c#界面鼠标拖动   控件在父窗体或屏幕中的绝对坐标

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/110493.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 〖Docker指南②〗Docker常用命令汇总

    〖Docker指南②〗Docker常用命令汇总Docker常用命令汇总最新版|帮助命令|镜像命令|容器命令

    2022年9月18日
    4
  • 容器技术详解_容器化技术

    容器技术详解_容器化技术一、什么是容器?IT里的容器技术是英文单词LinuxContainer的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。不过,在中文环境下,咱们要交流要传授,如果翻译成“集装箱技术”就有点拗口,所以结合中国人的吐字习惯和文化背景,更喜欢用容器这个词。不过,如果要形象的理解LinuxContainer技术的话,还是得念成集装箱会比较好。我们知道,海边码头里的集装箱…

    2025年7月10日
    4
  • 注册豪礼

    注册豪礼

    2022年3月3日
    32
  • Spring Bean生命周期总结「建议收藏」

    Spring Bean生命周期总结「建议收藏」1、简要说明1)本文基于spring5.1.7版本,采用ApplicationContext获取bean对象。2)BeanFactory和ApplicationContext对于bean后置处理器还有所不同,需要注意,ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调……

    2022年9月17日
    2
  • docker离线安装mysql镜像_安装rabbitmq

    docker离线安装mysql镜像_安装rabbitmqDocker离线安装RabbitMQ1、进入dockerhub,搜索rabbit镜像https://registry.hub.docker.com/_/rabbitmq/2、进入官方的镜像,我们选择带有“management”的版本(包含web管理界面)https://hub.docker.com/_/rabbitmq?tab=tags#通过以下方式无法查询到,问题未知[root@localhost~]#dockersearch3.7.7-managementErrorres

    2022年9月26日
    3
  • SpringBoot调用.asmx后缀的webservice接口

    SpringBoot调用.asmx后缀的webservice接口目录一、简介二、示例一、简介最近在项目中,在与其他公司做对接中需要回调一个对方的接口,根据对方提供的接口地址,发现是webservice的接口,而且接口后缀名为.asmx,因为现在webservice接口基本上都是wsdl这种形式,所以使用wsdl调用方式不能用,得使用其他方法。WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互。其实WebService.

    2022年6月6日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号