Lua——模仿按键精灵
来源:互联网 发布:数控车床车盲孔编程 编辑:程序博客网 时间:2024/06/06 11:19
时间:2016.11.02
主要使用C导出库提供按键精灵功能库的模拟,Lua负责调用这些接口实现脚本功能
首先要模拟鼠标和按键功能需要用到下面两个函数:
// 模拟鼠标功能VOID mouse_event( DWORD dwFlags, // motion and click options DWORD dx, // horizontal position or change DWORD dy, // vertical position or change DWORD dwData, // wheel movement ULONG_PTR dwExtraInfo // application-defined information);// 模拟键盘功能VOID keybd_event( BYTE bVk, //虚拟按键码 BYTE bScan, //定义该键的硬件扫描码 DWORD dwFlags, //KEYEVENTF_KEYDOWN:0 KEYEVENTF_KEYUP DWORD dwExtralnfo //定义与击键相关的附加的32位值);
主要是直接加载C的动态链接库,导出类似按键精灵里面使用的命令
Delay : 延时
MoveTo: 鼠标移动
LeftClick: 鼠标左键点击
LeftDClick: 鼠标左键双击
RigthClick: 鼠标右键点击
RightDClick: 鼠标右键双击
LeftDown: 鼠标左键按下
LeftUp: 鼠标左键抬起
RightDown: 鼠标右键按下
RightUp: 鼠标右键抬起
#include < Windows.h>extern "C"{ #include "lua.h" #include "lualib.h" #include "lauxlib.h" #pragma comment( lib, "lua5.1.lib" )}/////////////////////////////////////////////////////////////////////////////////鼠标操作// MoveTo 鼠标移动extern "C" int __declspec(dllexport) MoveTo( lua_State* L ){ int Y = lua_tonumber( L, -1 ); int X = lua_tonumber( L, -2 );/* 当mouse_event的第一个参数附加上MOUSEEVENT_ABSOLUTE标志以后,后面两个参数表示标准化的绝对坐标值,取值范围为0到65535。(0,0)对应屏幕左上角位置,(65535,65535)对应右下角位置。固传递参数的时候,需要将传进来的参数进行格式化*/ int ScreenWidth = ::GetSystemMetrics( SM_CXSCREEN ); int ScreenHeight = ::GetSystemMetrics( SM_CYSCREEN ); X = X * 65535.00 / ScreenWidth; Y = Y * 65535.00 / ScreenHeight; ::mouse_event( MOUSEEVENT_MOVE | MOUSEEVENT_ABSOLUTE, X, Y, 0, NULL ); return 0;}// 左键按下extern "C" int __declspec(dllexport) LeftDown( lua_State* L ){ ::mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL ); return 0;}// 左键抬起extern "C" int __declspec(dllexport) LeftUp( lua_State* L ){ ::mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL ); return 0;}// 左键点击extern "C" int __declspec(dllexport) LeftClick( lua_State* L ){ ::mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL ); ::mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL ); return 0;}// 左键点击extern "C" int __declspec(dllexport) LeftClick( lua_State* L ){ ::mouse_event( MOUSEEVENTF_LEFTDOWN, 0, 0, 0, NULL ); ::mouse_event( MOUSEEVENTF_LEFTUP, 0, 0, 0, NULL ); return 0;}// 右键按下extern "C" int __declspec(dllexport) RightDown( lua_State* L ){ ::mouse_event( MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, NULL ); return 0;}// 右键抬起extern "C" int __declspec(dllexport) RightUp( lua_State* L ){ ::mouse_event( MOUSEEVENTF_RIGHTUP, 0, 0, 0, NULL ); return 0;}// 右键点击extern "C" int __declspec(dllexport) RightClick( lua_State* L ){ ::mouse_event( MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, NULL ); ::mouse_event( MOUSEEVENTF_RIGHTUP, 0, 0, 0, NULL ); return 0;}// 右键双击extern "C" int __declspec(dllexport) RightDClick( lua_State* L ){ ::mouse_event( MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, NULL ); ::mouse_event( MOUSEEVENTF_RIGHTUP, 0, 0, 0, NULL ); ::mouse_event( MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, NULL ); ::mouse_event( MOUSEEVENTF_RIGHTUP, 0, 0, 0, NULL ); return 0;}extern "C" int __declspec(dllexport) luaopen_add( lua_State* L ){ lua_register( L, "MoveTo", MoveTo ); lua_register( L, "Delay", Delay ); lua_register( L, "LeftDown", LeftDown ); lua_register( L, "LeftUp", LeftUp ); lua_register( L, "LeftClick", LeftClick ); lua_register( L, "LeftDClick", LeftDClick ); lua_register( L, "RightDown", LeftDown ); lua_register( L, "RightUp", LeftUp ); lua_register( L, "RightClick", LeftClick ); lua_register( L, "RightDClick", LeftDClick ); return 0;}
最后通过Lua文件来设置脚本:
MoveTo = package.loadlib( "VicAssist.dll", "MoveTo" )LeftClick = package.loadlib( "VicAssist.dll", "LeftClick" )Delay = package.loadlib( "VicAssist.dll", "Delay" )MoveTo( 34, 42 )Delay( 200 )LeftClick()
鼠标会移动到该位置然后点击一次
0 0
- Lua——模仿按键精灵
- 开发中的自动化——按键精灵&AutoIt
- C++用钩子模仿按键精灵录制键盘鼠标的功能
- 按键精灵
- 按键精灵
- 按键精灵
- 按键精灵
- 按键精灵
- lua模仿java里面的模板引擎
- 利用Python和win32编程范例——按需定制一个按键精灵
- 利用Python和win32编程范例——按需定制一个按键精灵
- 练手——果壳网模仿
- CSS——模仿按钮1
- CSS——模仿按钮2(hover)
- curl_setopt函数—模仿用户行为
- Lua脚本语言——Lua简介
- 【Lua知识整理】——Lua栈
- Lua性能优化—Lua内存优化
- Easy 270题 Closest Binary Search Tree Value
- 基于SSH的员工管理系统(三)——配置文件
- 《大话数据结构》
- 有时候是否该允许脏读?
- 杭电OJ 2006
- Lua——模仿按键精灵
- HTTP 常用 Header 讲解
- st表
- 《大话数据结构》
- VS2012中破解Visual AssistX
- MySQL (3)表与表之间的联系 多表查询
- AspNet WebApi运行出错的处理办法
- 工厂模式
- 设计模式之代理模式