热点推荐

查看: 78|回复: 9
收起左侧

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

[复制链接]
  • TA的每日心情
    振奋
    6 天前
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    22

    帖子

    461

    积分

    Rank: 2Rank: 2

    积分
    461
    发表于 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的每日心情
    点赞
    昨天 09:56
  • 签到天数: 397 天

    连续签到: 2 天

    [LV.9]以坛为家II

    102

    主题

    472

    帖子

    2557

    积分

    Rank: 9

    积分
    2557

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

    发表于 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的每日心情
    振奋
    6 天前
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    22

    帖子

    461

    积分

    Rank: 2Rank: 2

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

    2.声明函数

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

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    振奋
    6 天前
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    22

    帖子

    461

    积分

    Rank: 2Rank: 2

    积分
    461
     楼主| 发表于 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的每日心情
    点赞
    昨天 09:56
  • 签到天数: 397 天

    连续签到: 2 天

    [LV.9]以坛为家II

    102

    主题

    472

    帖子

    2557

    积分

    Rank: 9

    积分
    2557

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

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

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

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    振奋
    6 天前
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    22

    帖子

    461

    积分

    Rank: 2Rank: 2

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

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

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    振奋
    6 天前
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    22

    帖子

    461

    积分

    Rank: 2Rank: 2

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

    刚才去C#中验证了,在窗体hWindowControl中绘图时无效

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    振奋
    6 天前
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    22

    帖子

    461

    积分

    Rank: 2Rank: 2

    积分
    461
     楼主| 发表于 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的每日心情
    点赞
    昨天 09:56
  • 签到天数: 397 天

    连续签到: 2 天

    [LV.9]以坛为家II

    102

    主题

    472

    帖子

    2557

    积分

    Rank: 9

    积分
    2557

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

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

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

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

  • TA的每日心情
    振奋
    6 天前
  • 签到天数: 13 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    1

    主题

    22

    帖子

    461

    积分

    Rank: 2Rank: 2

    积分
    461
     楼主| 发表于 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);

    发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题前面加上【已解决】

    回报帮助你解决问题的坛友,右下角【免费评分】赠与对方视觉币和热心值,伸手党遭人唾弃,做一个热心并受欢迎的人!

    您需要登录后才可以回帖 会员登录 | 会员注册

    本版积分规则

    经营性网站备案信息 经营性网站
    备案信息

    中国互联网举报中心 中国互联网
    举报中心

    中国文明网传播文明 中国文明网
    传播文明

    诚信网站

    深圳市市场监督管理局企业主体身份公示 工商网监
    电子标识