Halcon视觉之家 - 51Halcon专注于机器视觉技术

 找回密码
 会员注册

QQ登录

只需一步,快速开始

扫一扫,微信登录

查看: 1617|回复: 9

[待解决] send_mouse_down_event,send_mouse_up_event等如何使用?

[复制链接]
  • TA的每日心情

    2020-11-26 16:08
  • 签到天数: 37 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    42

    帖子

    104

    积分

    Rank: 1

    积分
    104
    发表于 2019-6-12 11:31:02 | 显示全部楼层 |阅读模式

    51Halcon诚邀您的加入,专注于机器视觉开发与应用技术,我们一直都在努力!

    您需要 登录 才可以下载或查看,没有帐号?会员注册

    x
    本帖最后由 tystq 于 2019-6-12 15:46 编辑

    如题,没有搞明白send_mouse_down_event,send_mouse_up_event等如何使用,猜测是向指定窗口发送鼠标信号事件,但是执行的时候始终报错5123,希望实现的功能是draw_circle等阻塞算子不手动点击右键就能退出
  • TA的每日心情
    开心
    2021-10-18 14:21
  • 签到天数: 859 天

    连续签到: 2 天

    [LV.10]以坛为家III

    188

    主题

    926

    帖子

    5545

    积分

    Rank: 9

    积分
    5545

    热心会员突出贡献切换助手验证会员最佳新人

    发表于 2019-6-12 14:24:19 | 显示全部楼层
    1.引用命名空间
    1. using System.Runtime.InteropServices;
    复制代码

    2.声明函数
    1. [DllImport("user32.dll")]
    2. public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    3. [DllImport("user32.dll")]
    4. public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
    复制代码

    3.实现代码(窗口名称和Class名称用spy++去找就可以了):
    1. IntPtr myIntPtr = FindWindow(null, "HALCON/WIN32-3600");
    2. mouse_event(CWindowsApi.MOUSEEVENTF_RIGHTDOWN | CWindowsApi.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0);
    复制代码

    然后在绘制的时候可以发给Halcon的窗口也可以自己定义自己的窗口句柄去模拟鼠标右键!
  • TA的每日心情

    2020-11-26 16:08
  • 签到天数: 37 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    42

    帖子

    104

    积分

    Rank: 1

    积分
    104
     楼主| 发表于 2019-6-12 15:02:40 | 显示全部楼层
    绝地武士 发表于 2019-6-12 14:24
    1.引用命名空间

    2.声明函数

    感谢你的回到,但是mouse_event模拟鼠标右键对halcon绘图完全无效,不信你自己去验证
  • TA的每日心情

    2020-11-26 16:08
  • 签到天数: 37 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    42

    帖子

    104

    积分

    Rank: 1

    积分
    104
     楼主| 发表于 2019-6-12 15:20:08 | 显示全部楼层
    绝地武士 发表于 2019-6-12 14:24
    1.引用命名空间

    2.声明函数

    根据你的思路,修改成下面的代码可以了
    IntPtr myIntPtr = FindWindow(null, "HALCON/WIN32-200000");
                SetForegroundWindow(myIntPtr);//前置
                // mouse_event(0x8 | 0x10, 0, 0, 0, 0);
                mouse_event(0x8 , 0, 0, 0, 0);//鼠标右键按下
                System.Threading.Thread.Sleep(100);
                mouse_event( 0x10, 0, 0, 0, 0);//鼠标右键弹起
  • TA的每日心情
    开心
    2021-10-18 14:21
  • 签到天数: 859 天

    连续签到: 2 天

    [LV.10]以坛为家III

    188

    主题

    926

    帖子

    5545

    积分

    Rank: 9

    积分
    5545

    热心会员突出贡献切换助手验证会员最佳新人

    发表于 2019-6-12 15:20:46 | 显示全部楼层
    tystq 发表于 2019-6-12 15:02
    感谢你的回到,但是mouse_event模拟鼠标右键对halcon绘图完全无效,不信你自己去验证 ...

    HDevelop中我已经验证了,draw_*算子执行后你需要绘制任意图形(否则直接右键也不行),然后就可以发送消息模拟右键就可以结束绘制!
  • TA的每日心情

    2020-11-26 16:08
  • 签到天数: 37 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    42

    帖子

    104

    积分

    Rank: 1

    积分
    104
     楼主| 发表于 2019-6-12 15:24:00 | 显示全部楼层
    绝地武士 发表于 2019-6-12 15:20
    HDevelop中我已经验证了,draw_*算子执行后你需要绘制任意图形(否则直接右键也不行),然后就可以发送消 ...

    感谢你的思路,已经OK,追加了前置和鼠标右键按下和弹起中间延时操作就OK啦
  • TA的每日心情

    2020-11-26 16:08
  • 签到天数: 37 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    42

    帖子

    104

    积分

    Rank: 1

    积分
    104
     楼主| 发表于 2019-6-12 15:47:44 | 显示全部楼层
    绝地武士 发表于 2019-6-12 15:20
    HDevelop中我已经验证了,draw_*算子执行后你需要绘制任意图形(否则直接右键也不行),然后就可以发送消 ...

    刚才去C#中验证了,在窗体hWindowControl中绘图时无效
  • TA的每日心情

    2020-11-26 16:08
  • 签到天数: 37 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    42

    帖子

    104

    积分

    Rank: 1

    积分
    104
     楼主| 发表于 2019-6-12 16:26:52 | 显示全部楼层
    绝地武士 发表于 2019-6-12 15:20
    HDevelop中我已经验证了,draw_*算子执行后你需要绘制任意图形(否则直接右键也不行),然后就可以发送消 ...

    更奇怪的是把  mouse_event(0x8 | 0x10, 0, 0, 0, 0);写在button的MouseDown事件中点击按钮是可以的,但是写在Click事件中点击按钮就不行
  • TA的每日心情
    开心
    2021-10-18 14:21
  • 签到天数: 859 天

    连续签到: 2 天

    [LV.10]以坛为家III

    188

    主题

    926

    帖子

    5545

    积分

    Rank: 9

    积分
    5545

    热心会员突出贡献切换助手验证会员最佳新人

    发表于 2019-6-12 16:36:32 | 显示全部楼层
    tystq 发表于 2019-6-12 15:47
    刚才去C#中验证了,在窗体hWindowControl中绘图时无效

    C#窗体中要获取C#窗口的句柄不是你抓的那个HALCON/WIN32-200000了,而且在C#中窗口控件有单独的事件,你需要加载到窗口的事件中而不是Click!
  • TA的每日心情

    2020-11-26 16:08
  • 签到天数: 37 天

    连续签到: 1 天

    [LV.5]常住居民I

    3

    主题

    42

    帖子

    104

    积分

    Rank: 1

    积分
    104
     楼主| 发表于 2019-6-12 17:31:06 | 显示全部楼层
    绝地武士 发表于 2019-6-12 16:36
    C#窗体中要获取C#窗口的句柄不是你抓的那个HALCON/WIN32-200000了,而且在C#中窗口控件有单独的事件,你需 ...

    大神,经过摸索,发现halcon绘图指令响应的右键是全局的,跟窗口无关,即使你在Excel窗口下点击鼠标右键,也能终止绘图(c#中一样)
    [DllImport("user32.dll")]
            private static extern int SetCursorPos(int x, int y);
            /// <summary>
            /// 移动鼠标到指定的坐标点
            /// </summary>
            public void MoveMouseToPoint(Point p)
            {
                SetCursorPos(p.X, p.Y);
            }

    //先移动鼠标到this.hWindowControl1左上角是可以的,但是放在Form1_FormClosing中无效,就是用户忘记点鼠标右键后无法退出绘图指令
      MoveMouseToPoint(PointToScreen(this.hWindowControl1.Location));
       mouse_event(0x8 | 0x10, 0, 0, 0, 0);
    您需要登录后才可以回帖 登录 | 会员注册

    本版积分规则

    视觉培训招生

    建议您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流浏览器浏览本网站

    51Halcon会员技术交流会员技术交流 | 51Halcon官方客服咨询官方客服咨询 | Halcon切换助手使用反馈切换助手使用

    算子查询| 申请友链| 小黑屋| 手机版| Archiver|

    © 2015-2021 51Halcon机器视觉  X3.4  粤ICP备15095995号 粤公网安备44030602000670号

    快速回复 返回顶部 返回列表