Mousetroke GitHub
简体中文 ▾
指南目录

Lua 实用示例#

将一个完整代码块粘贴到手势的“Lua 脚本”动作中,每块都定义了 ms_action。文字示例先在临时文档中试用。编辑方法见 Lua 入门,平台支持见 Lua API。

跨平台示例用 package.config 选择 Windows 的 ^(Control)或 Mac 的 #(Command)。剪贴板示例只恢复文字,不保留图片等格式。200 ms 等待只是示例,不保证每个程序都足够,较慢时请增加。示例会临时替换剪贴板,之后恢复保存的文字;期间新复制的内容也会被恢复操作覆盖。

输出固定文本#

用途:用一次鼠标手势输入常用句子。

function ms_action()
  ms.keys("你好,来自 Mousetroke 的问候。", true)
end

两平台的文本优先模式都支持 Unicode,但仍会解析语法字符。任意包含 %、+、花括号的文字,建议用下面的剪贴板方法。

粘贴后恢复剪贴板文字#

用途:按原样粘贴文字,再恢复剪贴板之前的文字。

function ms_action()
  local mod = package.config:sub(1, 1) == "\\" and "^" or "#"
  local saved = ms.get_clipboard_text()
  ms.set_clipboard_text("价格:50% + 税费 {示例}")
  ms.keys(mod .. "v")
  ms.sleep(200)
  ms.set_clipboard_text(saved or "")
end

这样粘贴的内容不经过按键序列转义。原来没有文字时,最终剪贴板变为空文字;这些 API 无法恢复原来的其他格式。

按程序输出不同文字#

用途:根据手势目标的程序身份选择句子。

function ms_action(pos, wid, pid, exe)
  local name = string.lower(exe)
  local text = "来自 Mousetroke 的问候"
  if string.find(name, "firefox", 1, true) then
    text = "你好 Firefox"
  elseif name == "com.apple.safari" then
    text = "你好 Safari"
  end
  ms.keys(text, true)
end

Windows 通常传完整可执行文件路径,Mac 通常传 bundle id。这里检查的是手势目标,输入仍由活动程序接收;需要先激活目标程序时,可先调用 ms.focus_win(wid)。

插入今天日期#

用途:按年-月-日格式插入本地日期。

function ms_action()
  ms.keys(os.date("%Y-%m-%d"), true)
end

运行时可以使用 os.date。这里 % 是 Lua 日期格式语法,最终输出的数字和连字符适用于文本优先输入。

在网站搜索选中文字#

用途:复制选区,按 UTF-8 编码后打开 Google 搜索。

local function url_encode(text)
  return (text:gsub("([^A-Za-z0-9%-._~])", function(c)
    return string.format("%%%02X", string.byte(c))
  end))
end

function ms_action()
  local mod = package.config:sub(1, 1) == "\\" and "^" or "#"
  local saved = ms.get_clipboard_text()
  ms.set_clipboard_text("")
  ms.keys(mod .. "c")
  ms.sleep(200)
  local text = ms.get_clipboard_text() or ""
  ms.set_clipboard_text(saved or "")
  if text ~= "" then
    ms.open("https://www.google.com/search?q=" .. url_encode(text))
  else
    ms.show_toast("没有复制到选中文字")
  end
end

先在活动程序中选中文字再触发。复制前清空剪贴板,避免复制无效时搜索旧内容。Lua 不自动替换选区变量;更简单的打开网址动作可以自动采集选区。

给选中文字加引号或括号#

用途:在可编辑文本框中,将选区替换为带引号的文字。

function ms_action()
  local mod = package.config:sub(1, 1) == "\\" and "^" or "#"
  local saved = ms.get_clipboard_text()
  ms.set_clipboard_text("")
  ms.keys(mod .. "c")
  ms.sleep(200)
  local text = ms.get_clipboard_text() or ""
  if text ~= "" then
    ms.set_clipboard_text('"' .. text .. '"')
    ms.keys(mod .. "v")
    ms.sleep(200)
  end
  ms.set_clipboard_text(saved or "")
end

改成方括号时,将包裹表达式替换为 "[" .. text .. "]"。复制后需要保留选中状态,粘贴才能覆盖选区;只读网页不能这样编辑。

切换窗口置顶#

用途:切换 Windows 窗口是否置顶。此需求请选“窗口操作 → 置顶 / 取消置顶”,该动作会查询实际状态并切换。Lua API 只能设置指定状态,没有置顶查询函数,每次手势的 VM 也是新建的。Mac 不支持跨程序置顶。

Windows 如需单独的“固定此窗口”Lua 手势,可以用:

function ms_action(pos, wid)
  if package.config:sub(1, 1) ~= "\\" then
    ms.show_toast("Mac 暂不支持窗口置顶")
    return
  end
  if wid ~= 0 then ms.set_win_top(wid, true) end
end

另建取消置顶手势时将 true 改为 false。使用 Lua 全局布尔变量会在每次执行时重置,不能实现切换。

最大化或还原#

用途:在 Windows 切换目标窗口的最大化状态,在 Mac 切换填满工作区的缩放。

function ms_action(pos, wid)
  if wid == 0 then return end
  local state = ms.get_win_state(wid)
  if state == nil then
    ms.show_toast("窗口不可用;Mac 请检查辅助功能权限")
    return
  end
  ms.set_win_state(wid, state == "max" and "normal" or "max")
end

Mac 使用与内建窗口动作相同的 AX 缩放按钮。状态查询识别填满工作区的窗口;按内容大小缩放的应用可能仍报告 normal,此类应用请用“窗口操作 → 最大化 / 还原”。缺少辅助功能权限或窗口不可用时返回 nil。当前没有可将窗口移动到另一显示器的 Lua 位置/大小 API。

调整鼠标所在屏幕亮度#

用途:Windows 将鼠标所在屏幕调亮 5 个百分点。

function ms_action()
  local p = ms.get_mouse_pos()
  local value = ms.set_brightness(p, 5)
  if value ~= nil then
    ms.show_toast("亮度:" .. value)
  else
    ms.show_toast("当前屏幕或平台无法使用亮度 API")
  end
end

将 5 改成 -5 可另建调暗手势。Windows 需要可用的 DDC/CI 或 WMI 硬件支持,WMI 回退会选择第一个亮度设备,可能是另一块屏幕。成功返回 0–100 的百分比,两平台失败均为 nil。Mac 此处返回 nil:现有后端仅发送亮度键,不能返回百分比或按百分点调整。可用“媒体与系统 → 亮度 +”/“亮度 −”发送内置屏幕亮度键,不支持按鼠标选择屏幕或外接 DDC/CI。

打开文件夹#

用途:用系统文件管理器打开当前用户的下载文件夹。

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.cmd('explorer.exe "%USERPROFILE%\\Downloads"')
  else
    ms.cmd('/usr/bin/open "$HOME/Downloads"')
  end
end

这些环境变量由系统 Shell 展开,不是 Mousetroke 动作变量。示例假设下载文件夹位于通常位置。

带参数运行程序#

用途:向程序传递参数字符串。

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.run("cmd.exe", "/K echo Hello from Mousetroke")
  else
    ms.run("/usr/bin/say", '"Hello from Mousetroke"')
  end
end

Windows 打开命令窗口显示文字;Mac 用 say 朗读。ms.run 的参数是一段字符串,不是表,也不返回进程句柄。

打开任务管理器或活动监视器#

用途:打开当前平台的进程查看工具。

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.keys("^+{ESC}")
  else
    ms.run("com.apple.ActivityMonitor")
  end
end

Windows 使用 Ctrl+Shift+Esc;Mac 按 bundle id 启动活动监视器。

锁屏#

用途:使用系统快捷键锁定当前会话。

function ms_action()
  if package.config:sub(1, 1) == "\\" then
    ms.keys("#l")
  else
    ms.keys("^#q")
  end
end

Mac 是 Control+Command+Q,Windows 是 Win+L。Ctrl+Alt+Del 不能作为普通模拟按键序列发送。

暂停十分钟#

用途:临时暂停引擎,Mousetroke 持续运行时到时恢复。

function ms_action()
  ms.set_paused(true)
  ms.show_toast("手势暂停十分钟", 2000)
  ms.sleep(10 * 60 * 1000)
  ms.set_paused(false)
  ms.show_toast("手势已恢复", 1500)
end

两平台均可用,会保留一个休眠十分钟的 Lua 工作线程。这不是持久计时器,退出或重启就会结束。期间可以手动恢复,但等待结束时脚本仍会再发恢复命令。避免启动多个副本。详见运行限制。

从一个常用手势开始

免费下载 Mousetroke,设置你的第一个手势。Windows 与 Mac 测试版均可使用。