|
实现一个鼠标连点器,在易语言中,是用了超级模块中的 监控热键功能
源码如下:
- .版本 2
- .子程序 监视热键, 整数型, 公开, 监视一个热键,当热键被触发时激活响应事件.(成功返回热键标识,失败返回0).注:必须真实的按键才会触发热键
- .参数 响应事件, 子程序指针, , 响应事件(热键标识,其它...),事件参数数目不限!如果再次监视热键将响应事件!
- .参数 键代码, 整数型, , 触发事件的基本键,事件在基本键按下时触发,负数为放开时触发,1鼠标左键,2鼠标右键,更多查询相关帮助
- .参数 功能键状态, 整数型, 可空, 1 Alt 2 Ctrl 4 Shift 8 Win 若要两个或以上的状态键,则把它们的值相加.
- .参数 其它键, 整数型, 可空, 如果你需要注册由两个普通键组合的热键,可设置一个其它键代码.
- .参数 周期, 整数型, 可空, 默认为10,监视热键的周期时间(建议5-200之间)
- .参数 直接触发, 逻辑型, 可空, 默认为假:创建新的线程事件 真:直接调用事件等待返回
- .局部变量 临时热键信息, 热键信息2
- .局部变量 i, 整数型
- .如果真 (到字节 (取绝对值 (键代码)) ≤ 0)
- 返回 (0)
- .如果真结束
- .计次循环首 (取数组成员数 (监视热键_信息), i)
- .如果真 (监视热键_信息 [i].普通键 = 键代码 且 监视热键_信息 [i].功能键 = 功能键状态 且 监视热键_信息 [i].其它键 = 其它键)
- 监视热键_信息 [i].事件子程序 = 响应事件
- 监视热键_信息 [i].直接触发 = 直接触发
- .如果真 (监视热键_信息 [i].标识 ≠ 0)
- 返回 (监视热键_信息 [i].标识) ' 已经注册过的热键,返回热键标识
- .如果真结束
- 监视热键_信息 [i].标识 = i + 1000000
- 返回 (监视热键_信息 [i].标识)
- .如果真结束
- .计次循环尾 ()
- 临时热键信息.事件子程序 = 响应事件
- 临时热键信息.普通键 = 键代码
- 临时热键信息.功能键 = 功能键状态
- 临时热键信息.其它键 = 其它键
- 临时热键信息.直接触发 = 直接触发
- 临时热键信息.标识 = 取数组成员数 (监视热键_信息) + 1000001
- 加入成员 (监视热键_信息, 临时热键信息)
- .如果真 (临时热键信息.标识 = 1000001)
- _创建定时器 (0, 16661, 选择 (周期 ≤ 0, 10, 周期), &监视热键线程)
- .如果真结束
- 返回 (临时热键信息.标识)
复制代码
实现鼠标连点的功能易语言代码:
- .版本 2
- 监视热键 (&监控子程序, #F9键)
- 监视热键 (&暂停, #F10键)
复制代码
- .版本 2
- .支持库 spec
- .子程序 监控子程序
- .局部变量 临时句柄, 整数型
- .局部变量 图坐标, 坐标型
- .局部变量 i, 整数型
- .局部变量 单色, 字节型
- .局部变量 收钱按钮, 坐标型
- 收分 = 真
- ' WINIO.锁定鼠标 (假)
- ' 子程序_用户登录 ()
- 临时句柄 = 取当前窗口 ()
- ' 临时句柄 = 进程取句柄 (“Catchfish.run”,, “猎鱼达人3D”)
- ' 临时句柄 = 取句柄 (“Catchfish.run”, , “猎鱼达人3D”)
- 调试输出 (临时句柄)
- 窗口激活 (临时句柄)
- 窗口移动 (临时句柄, 0, 0)
- .判断开始 (单选框1.选中 = 真) ' 拿货
- .判断循环首 (收分 = 真)
- 鼠标移动 (, 370, 327)
- 鼠标键 ()
- 超级延时 (800)
- .判断循环尾 ()
- .判断 (单选框2.选中 = 真) ' 出货
- .判断循环首 (收分 = 真)
- 鼠标移动 (, 807, 326)
- 鼠标键 ()
- 超级延时 (800)
- 鼠标移动 (, 712, 604)
- 鼠标键 ()
- 超级延时 (800)
- .判断循环尾 ()
- 实际效果很好,稳定实用。
复制代码
在C++中因为没有直接的类似于 监控热键的调用,也没有类似于想 易语言模块
可以直接实现该功能,因此用了
- void CCatchFishToolDlg::OnHotKey(UINT nHotKeyId, UINT nKey1, UINT nKey2)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- MyClass my;
- if (nHotKeyId==1000)
- {
- bTakeGoods = TRUE;
-
- HWND hWnd = ::FindWindow(_T("UnityWndClass"), _T("猎鱼达人3D"));
- my.Win_SetPosSize(hWnd, 0, 0, NULL, NULL); //移动窗口到0,0位置
- if (m_rad_take.GetCheck()) //拿货被勾选
- {
- m_edt_state.SetSel(-1);
- m_edt_state.ReplaceSel(_T("开始拿货...\r\n"));
- KillTimer(2);
- Sleep(1000);
- SetTimer(1, 800, NULL); //拿货
- /*while (bTakeGoods)
- {
- //SetCursorPos(370, 327);
- //mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
- ////模拟鼠标的所有事件
- //Sleep(50);
- //mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- //Sleep(800);
- }*/
- //在热键响应消息函数中,用while循环中执行动作时,是无法在响应
- //全局热键了
- //因此只能采用 时间控件来执行循环动作
- }
- else if (m_rad_save.GetCheck())
- {
- m_edt_state.SetSel(-1);
- m_edt_state.ReplaceSel(_T("开始存入仓库...\r\n"));
- KillTimer(1);
- Sleep(1000);
- SetTimer(2, 800, NULL); //拿货
-
- }
-
- }
- else if (nHotKeyId==2000)
- {
- /*bTakeGoods = FALSE;*/
- KillTimer(1);
- KillTimer(2);
- m_edt_state.SetSel(-1);
- m_edt_state.ReplaceSel(_T("暂停\r\n") );
- }
- CDialogEx::OnHotKey(nHotKeyId, nKey1, nKey2);
- }
- void CCatchFishToolDlg::OnDestroy()
- {
- CDialogEx::OnDestroy();
- // TODO: 在此处添加消息处理程序代码
- UnregisterHotKey(m_hWnd,1000);
- UnregisterHotKey(m_hWnd, 2000);
- }
复制代码
并在 timer 中实现执行代码,可是效果很差,不知道是什么原因
- void CCatchFishToolDlg::OnTimer(UINT_PTR nIDEvent)
- {
- // TODO: 在此添加消息处理程序代码和/或调用默认值
- switch (nIDEvent)
- {
- case 1:
- {
- SetCursorPos(370, 327);
- Sleep(100);
- mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
- //模拟鼠标的所有事件
- Sleep(100);
- mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- }
- case 2:
- {
- SetCursorPos(807, 326);
- Sleep(100);
- mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
- //模拟鼠标的所有事件
- Sleep(100);
- mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- Sleep(800);
- SetCursorPos(712, 604);
- Sleep(100);
- mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
- //模拟鼠标的所有事件
- Sleep(100);
- mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
- }
- default:
- break;
- }
- CDialogEx::OnTimer(nIDEvent);
- }
复制代码
经过,这样的对比,没有英语基础的编程初学者还是学习易语言速度会更快一些!
也倡议C++的大牛能多分享一些大家共用的类库、COM接口、dll库中实现更多的,类似于 易语言模块
的集中了很多功能,如:本文中的 监视热键 功能函数。。。
也就是说,制作这个用 热键响应的鼠标连点器,用易语言只需要 10分钟左右就写好了。
而C++就需要找大量的资料,先实现 这个 监视热键的功能,然后才能实现 这个简单的功能。
哎。。。。。
|
上一篇: 清明,以国之名,举国致哀!不忘记每一个因疫情逝去的人下一篇: (C语言)csv文件数据分析比较!
|