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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • FCN语义分割_卷积神经网络可用于分割吗

    FCN语义分割_卷积神经网络可用于分割吗1.FCN概述图像的语义分割则不仅是区分每个像素的前后景,更需要将其所属类别预测出来,属于计算机视觉领域。CNN做图像分类甚至做目标检测的效果已经被证明并广泛应用,图像语义分割本质上也可以认为是稠密的目标识别(需要预测每个像素点的类别)。传统的基于CNN的语义分割方法是:将像素周围一个小区域(如25*25)作为CNN输入,做训练和预测。这样做有3个问题: -像素区域的大小如何确定 -存储及计算…

    2022年8月21日
    8
  • 二叉树abcdefghij先序遍历_二叉树后序遍历的非递归算法

    二叉树abcdefghij先序遍历_二叉树后序遍历的非递归算法给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。题解深搜/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() :

    2022年8月9日
    9
  • 小程序中的视频下载「建议收藏」

    小程序中的视频下载「建议收藏」一个朋友问我他看到小程序中有一个视频,但是他不知道如何下载下来,我在手机上面打开想直接下载发现还真没有可以直接下载的按钮,然后研究得出大概思路如下,在电脑中打开小程序,然后使用wireshark转包工具抓取数据分析获视频下载地址,通过下载地址下载视频。使用工具:Wireshark3.2.2第一步:打开Wireshark启动监听网卡。(注意如果是多张网卡包括虚拟网卡…

    2022年5月30日
    141
  • Webdriver下载及使用

    Webdriver下载及使用Chrome浏览器驱动下载地址:http://chromedriver.storage.proxy.ustclug.org/index.htmlFirfox浏览器驱动下载地址:https://github.com/mozilla/geckodriver/releasesIE浏览器驱动下载地址:https://www.selenium.dev/downloads/Edge浏览器驱动下载地址:https://developer.microsoft.com/en-us/microsoft-edg…

    2022年9月19日
    4
  • 基于MATLAB的矩阵及元素赋值[通俗易懂]

    *内容摘要:该代码用于实现在MATLAB中矩阵及元素的赋值*文件标识:无*作者:*完成日期:2019-3-10*问题描述:给矩阵a赋值>>a=[147;258;369]a=147258369*问题描述:给矩阵全行赋予值…

    2022年4月8日
    85
  • 公网IP和内网IP的区别? 什么是127.0.0.1?

    公网IP和内网IP的区别? 什么是127.0.0.1?IP地址是设备在网络上的唯一标识符,比如无线路由器有两个IP,公网IP(例如100.78.118.73)连接互联网,私有(内网)IP(如192.168.1.1)连接局域网,当设备连接WIFI上网,无线路由器就会给手机或者电脑分配一个私有IP。这里提出了两种IP,公网IP和内网IP。怎么理解呢?其实是因为近几十年广泛运用的IPV4地址枯竭,已经无法让每个设备都拥有一个IP了,于是NAT技术诞生,…

    2022年6月3日
    46

发表回复

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

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