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)
上一篇 2021年8月15日 下午6:03
下一篇 2021年8月15日 下午6:03


相关推荐

  • phpstorm 2021.4 激活码_通用破解码

    phpstorm 2021.4 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月17日
    98
  • python middleware_Django组件之Middleware

    python middleware_Django组件之Middleware一 中间件在 django 的 settings py 文件下 有一个变量为 middleware 里面放的就是中间件 middleware django middleware security securitymidd django contrib sessions middleware sessionmiddl django middleware common co

    2026年3月19日
    2
  • CreateProcess和WinExec

    CreateProcess和WinExecCreateProcess非阻塞运行,而WinExec为阻塞运行,它非要等到返回时才继续执行。在两个进程共享同一个端口时,为了能让一个退出另一个申请,必须用函数CreateProcess,等到我的端口资源释放后,在运行另一个进程进行申请

    2022年7月11日
    42
  • python hashlib安装_Hashlib加密,内置函数,安装操作数据库「建议收藏」

    python hashlib安装_Hashlib加密,内置函数,安装操作数据库「建议收藏」hashlib模块的md5加密:md5同样的内容加密后是一样的md5加密后是不可逆的。即能加密,没办法解密。撞库:只是针对简单的,因为同样的内容加密后是一样的,难一点就不行了。登录密码:注册时候加密了保存,在登录时再加密,对比加密后内容一致即符合条件登录加盐:目的是增加复杂性。在该加密的内容上,再加上定好的一段儿内容,一同加密。在加上的这段内容,就是1importhashlib2#impor…

    2022年5月31日
    309
  • 十种寻址方式

    十种寻址方式寻址方式寻址方式分为指令寻址和数据寻址 一 指令寻址指令寻址分为顺序寻址和跳跃寻址 顺序寻址是通过程序计数器 PC 加 1 自动形成下一条指令的地址 跳跃寻址是通过转移类指令实现 二 数据寻址首先需要知道的是 数据寻址的方式比较多 在指令字中必须设置一个字段来表明是哪种寻址方式 并且指令的地址字段通常都不表示操作数的有效地址 我们把它称为形式地址 记作 A 有效地址记作 EA 由寻址方式和形式地址共同确定 指令的格式通常为 为了方便研究 假设机器字长 存储字长 指令字长都相

    2026年3月16日
    1
  • gluster 添加xlator新节点

    gluster 添加xlator新节点添加 xlator 过程步骤分析 1 执行命令 A 机器 mkdir home test 任意机器 glustervolum 机器 IP home test 如果你指定的 brick 位于根分区 在创建卷命令后加 force2 vim var lib glusterd vols testvol testvol fuse vol 这个是默认生成的配置文件 我

    2026年3月18日
    2

发表回复

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

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