欢迎大家来到IT世界,在知识的湖畔探索吧!
模拟鼠标键盘操作之前,先聊聊窗口的激活状态
欢迎大家来到IT世界,在知识的湖畔探索吧!
看这两个程序,正如人不能同时踏入两条河里,用户在同一时间只能操作一个窗口,点击哪个窗口,哪个窗口就处于激活状态,其他的窗口则处于非激活状态。
以下图片更直观一点
我激活了雷电模拟器,它覆盖在了计算器程序上面,如果我想点击计算器里的按钮,则需要先使计算器处于激活状态,然后才可以点击,例如下面这样
如果我不想激活激活计算器,还想让它响应鼠标事件,那么就需要给这个程序发送一条鼠标消息,例如:点击某某位置。计算器程序收到这个鼠标消息就会按照指令操作。要注意这种操作,并不是所有程序都会接受处理鼠标消息,另外有些程序收到鼠标消息后会自动激活窗口。
下面说一下模拟鼠标键盘的几个常用方法
Click和MouseClick,这两个方法只是参数不一样,实际效果是一样的,我建议使用MouseClick
- MouseClick 点击或按住鼠标按钮, 或滚动鼠标滚轮。接受7个可选参数 [WhichButton, X, Y, ClickCount, Speed, DownOrUp, Relative]
- WhichButton 类型: 字符串 如果为空或省略, 默认为 Left(鼠标左键). 否则, 指定要单击的按钮或鼠标滚轮的旋转/推入方向. 鼠标按钮: Left, Right, Middle(或这些单词的首字母); X1(第四个按钮) 或 X2(第五个按钮). 例如: MouseClick “X1”. Left 和 Right 分别对应主按钮和次按钮. 如果用户通过系统设置交换按钮, 则按钮的物理位置被交换, 但效果保持不变. 鼠标滚轮: 指定 WheelUp 或 WU 使滚轮向上转动(远离你); 指定 WheelDown(或 WD) 使滚轮向下转动(朝向你). 指定 WheelLeft(或 WL) 或 WheelRight(或 WR) 分别向左或向右滚动滚轮. ClickCount 是转动滚轮的格数.
- X, Y 类型: 整数 如果省略, 则使用光标的当前坐标. 否则, 请指定在点击前, 鼠标光标要移动到的 X 和 Y 坐标. 坐标相对于活动窗口的客户端区域, 除非曾使用 CoordMode 改变了这个设置.
- ClickCount 类型: 整数 如果省略, 默认为 1. 否则, 请指定单击鼠标按钮或转动鼠标滚轮的次数.
- Speed 类型: 整数 如果省略, 则使用默认速度(由 SetDefaultMouseSpeed 设置, 否则为 2). 否则, 请指定移动鼠标的速度, 介于 0(最快) 和 100(最慢) 之间. 速度为 0 表示鼠标瞬时移动. 对于 SendInput/Play 模式会忽略 Speed; 它们会瞬时移动鼠标到目标位置(不过 SetMouseDelay 有适用于 SendPlay 的模式). 要显示鼠标移动轨迹(例如使用脚本向观众进行演示时) — 请使用 SendEvent “{Click 100 200}” 或 SendMode “Event”(可以和 BlockInput 联合使用).
- DownOrUp 类型: 字符串 如果为空或省略, 则每次点击由 “按下” 事件后接着 “弹起” 事件组成. 否则, 请指定以下字母之一: D: 按下鼠标按钮, 但不释放(即生成按下事件). U: 释放鼠标按钮(即生成弹起事件).
- Relative 类型: 字符串 如果为空或省略, 则将 X 和 Y 坐标作为绝对位置使用. 否则, 请指定下面的字母: R: 将 X 和 Y 坐标视为距离当前鼠标位置的偏移. 换句话说, 会把光标从当前位置往右移动 X 像素(负值则往左) 且往下移动 Y 像素(负值则往上).
示例点击计算器上的清除按钮,这个按钮在此窗口上的坐标的330,380:
t:= WinExist("计算器") if t { WinActivate(t) Sleep(500) ;激活窗口后稍等500毫秒 MouseClick("Left",330,380) } else { MsgBox("还没有运行") }欢迎大家来到IT世界,在知识的湖畔探索吧!
运行此代码后,发现计算器已经清零
实验一下另一个方法,通过鼠标消息在不激活计算器程序的情况下清零它,先设置一下计算器内容和窗口状态,使计算器处于未激活状态
这个时候需要用到ControlClick方法来实现这个功能
欢迎大家来到IT世界,在知识的湖畔探索吧!t := WinExist("计算器") if t { ControlClick("X330 Y380", t) } else { MsgBox("还没有运行") }
然而不幸的事,计算器程序并不响应我们的鼠标消息,只好换雷电模拟器来实验了,先将雷电模拟器置于非激活状态,然后用ControlClick点击其中的游戏中心(已被遮挡)
t := WinExist("雷电模拟器") if t { Sleep(500) ControlClick("X200 Y200", t) } else { MsgBox("还没有运行") }结果就是点击了按钮,同时也激活了雷电模拟器
需要给第6个参数设置为”NA”确保不会激活窗口
欢迎大家来到IT世界,在知识的湖畔探索吧!ControlClick("X200 Y200", t,,,,"NA")
发送键盘事件和上述的鼠标一样,可以发送给当前激活的窗口,也可以发送给未激活的窗口(对于某些窗口有可能无效)
- Send 给当前处于激活状态的窗口发送键盘或鼠标消息,因为鼠标我们上面已经说了,就只说下键盘,举个例子给记事本发送Ctrl + F键,弹出搜索框
t := WinExist("Notepad") if t { WinActivate(t) Sleep(500) Send("^f") } else { MsgBox("还没有运行") }
- ControlSend 给某个窗口发送键盘消息,注意有些窗口不响应此消息,例如记事本就不响应此消息,只好用微信实验了
欢迎大家来到IT世界,在知识的湖畔探索吧!t := WinExist("微信") if t { ControlSend("^f",,t) } else { MsgBox("还没有运行") }
用这两个方法的时候,要注意输入法。由于是模拟键盘按键,所有如果目标窗口是可编辑的(例如记事本),输入法会影响效果,这时候需要用别的方法来代替,例如EditPaste,粘贴字符串 更多用法参加
https://wyagd001.github.io/v2/docs/lib/Click.htm
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/109777.html