mouse鼠标库

 

一、基础

什么是「坐标」

坐标指的是屏幕上一个像素点距离屏幕左上角的距离(像素个数),左边距为x,上边距为y。

二、软件模拟

mouse.move(x,y,bAbs); --移动鼠标
mouse.down(x,y,bAbs); --鼠标左键按下
mouse.up(x,y,bAbs); --鼠标左键弹起
mouse.click(x,y,bAbs); --单击鼠标左键
mouse.clickDB(x,y,bAbs); --双击鼠标左键
mouse.clickRB(x,y,bAbs); --单击鼠标右键
mouse.clickMB(x,y,bAbs); --单击鼠标中键

x,y指定屏幕坐标,bAbs参数指定是否绝对坐标。
绝对坐标是相对屏幕左上角的坐标,而相对坐标是相对鼠标当前位置的坐标。

例:

-- 向上向左移动一个像素
mouse.move(-1,-1,false);

-- 向下向右移动一个像素
mouse.move(1,1,false);

-- 鼠标移动到屏幕上从左向右100像素,从上向下100像素的绝对位置
mouse.move(100,100,true);

三、使用硬件指令软件模拟

使用硬件指令模拟鼠标,仅支持支持标准PS/2鼠标。
必须以管理员身份登录系统,必须删除其他键盘模拟类软件。

mouse.moveIO(x,y,bAbs); --移动鼠标
mouse.downIO(x,y,bAbs); --鼠标左键按下
mouse.upIO(x,y,bAbs); --鼠标左键弹起
mouse.clickIO(x,y,bAbs); --单击鼠标左键
mouse.clickDBIO(x,y,bAbs); --双击鼠标左键
mouse.clickRBIO(x,y,bAbs); --单击鼠标右键
mouse.clickMBIO(x,y,bAbs); --单击鼠标中键

x,y指定屏幕坐标,bAbs参数指定是否绝对坐标。
绝对坐标是相对屏幕左上角的坐标,而相对坐标是相对鼠标当前位置的坐标。

例:

-- 向上向左移动一个像素
mouse.moveIO(-1,-1,false);

-- 向下向右移动一个像素
mouse.moveIO(1,1,false);

-- 鼠标移动到屏幕上从左向右100像素,从上向下100像素的绝对位置
mouse.moveIO(100,100,true);

四、获取、设置鼠标当前位置

x,y = mouse.getPos()

可读取当前鼠标所在坐标。

例:

--在控制台输出坐标值
win.consoleOpen();
print("x="..x.."\ny="..y);


mouse.setPos(x,y)
设置当前鼠标所在坐标,返回布尔值,设置成功返回true.

例:

mouse.setPos(100,100);

可以使用mouse.setPos(x,y)函数模拟鼠标移动。
有些游戏只能用硬件模拟鼠标,但是可以用mouse.setPos(x,y)快速的移动鼠标。

五、检测指定鼠标键状态

下面的函数检测鼠标按键最后发送的按键消息

mouse.getStateLB() -- 检测左键是否按下
mouse.getStateRB() -- 检测右键是否按下
mouse.getStateMB() -- 检测中键是否按下

下面的函数检测按键的最新状态(不检测模拟发送的按键)

mouse.getStateLBX() -- 检测左键是否按下
mouse.getStateRBX() -- 检测右键是否按下
mouse.getStateMBX() -- 检测中键是否按下

六、等待按下指定鼠标键

mouse.waitDB() -- 等待鼠标左键双击
mouse.waitLB() -- 等待点击鼠标左键
mouse.waitRB() -- 等待点击鼠标右键
mouse.waitMB() -- 等待点击鼠标中键

七、读取当前鼠标指针

hico = mouse.getCur()
返回值为当前图标句柄。

可通过新增的image库函数转换为图像。

img = image.new();
ok,x,y = img:fromHICO(hico); --返回图标
ok,x,y = img:fromHICO(hico,1); --返回外观图案
ok,x,y = img:fromHICO(hico,2); --返回掩码图

--[[返回值ok表示转换是否成功.x,y为热区偏移坐标。
可以用img:test img:testX img:testXX 等函数进行比较识别
掩码图用来识别更好一些。

每次程序启动以后,首先通过识别认出图像句柄对应的是哪一个图标样本。
在以后的判断中就只要分析句柄就可以了。

更多参考验证码识别教程。
--]]

八、示例程序:拖动桌面图标

key.press(0,"LEFT_WINDOWS","D"); --模拟按键显示桌面
win.messagePrint("请点选桌面上的一个图标")

mouse.waitLB(); --等待鼠标单击桌面图标
delay(1000)
 
mouse.down(0,0,false);
 
for i=1,10,1    do  
   mouse.move(10,10,false)
   delay(100)  
end;
 
mouse.up(0,0,false)