惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Y
Y Combinator Blog
The GitHub Blog
The GitHub Blog
Vercel News
Vercel News
D
DataBreaches.Net
MongoDB | Blog
MongoDB | Blog
H
Help Net Security
小众软件
小众软件
美团技术团队
T
The Blog of Author Tim Ferriss
爱范儿
爱范儿
D
Docker
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
Blog — PlanetScale
Blog — PlanetScale
H
Hackread – Cybersecurity News, Data Breaches, AI and More
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
S
SegmentFault 最新的问题
云风的 BLOG
云风的 BLOG
B
Blog
雷峰网
雷峰网
The Cloudflare Blog

博客园 - 我才是银古

第16章:常见问题、排错与最佳实践 第15章:扩展生态、MCAD 与外部集成 第12章:实战案例:机械结构与 3D 打印零件 第14章:构建、测试、调试与贡献流程 第13章:OpenSCAD 源码架构与核心执行流程 第11章:预览、渲染、网格精度与性能优化 第09章:列表推导、递归与算法建模 第08章:参数化零件库与复用设计 第10章:导入导出、命令行与自动化 第06章:CSG 布尔建模方法 第07章:二维图形、拉伸、旋转与投影 第05章:基础几何、坐标系与变换 第04章:参数、变量、函数、模块与作用域 OpenSCAD 教程目录 第03章:OpenSCAD 语言基础 第02章:安装、环境配置与开发工作流 第01章:OpenSCAD 项目全景与学习路线 第02章:源码获取、编译与开发环境配置 第01章:OCCT项目全景与学习路线 第18章:二次开发实战与综合案例 第18章:综合实战案例 第17章:数据交换与协同 第16章:源码架构与二次开发 第15章:插件与自定义工作台开发 第14章:Python脚本宏与自动化 第13章:FEM仿真分析 第12章:CAM数控加工 第11章:SurfaceMesh与逆向工程 第10章:Draft二维绘图与BIM建筑 第09章:工程图TechDraw
第05章 - 键盘控制与文本输入
我才是银古 · 2026-06-24 · via 博客园 - 我才是银古

第05章 - 键盘控制与文本输入

键盘自动化与鼠标同样重要:填写表单、触发快捷键、输入文本、控制媒体音量等都离不开它。RobotGo 的键盘 API 既能输入任意 Unicode 文本,也能精确模拟单键、组合键以及按键的按下/松开状态。本章将完整讲解键盘相关函数、按键名称表以及实战要点。

5.1 输入文本:Type

Type 是最常用的文本输入函数,它会把字符串逐字“打”出来,支持英文、数字、符号以及中日韩等 Unicode 字符:

robotgo.Type("Hello World")
robotgo.Type("你好,世界")
robotgo.Type("こんにちは世界")
robotgo.Type("だんしゃり")

Type 还支持额外参数。例如官方示例中的:

robotgo.Type("だんしゃり", 0, 1)

后续参数可用于指定目标进程 PID 等高级用法(向特定窗口发送输入),这部分会在第 10 章“进程与窗口管理”中结合 FindIds 一起讲解。

性能提示:Type 是逐字符输入,对于很长的文本会比较慢。如果要输入大段文本,更高效的做法是先用 WriteAll 写入剪贴板,再用 KeyTap("v", "ctrl") 粘贴(详见第 9 章)。

5.2 Unicode 输入

对于需要按 Unicode 码点输入的特殊场景,RobotGo 提供了 UnicodeTypeCharCodeAt

// 取字符串 "Test" 中索引 0 处字符的 Unicode 码点
ustr := uint32(robotgo.CharCodeAt("Test", 0))
robotgo.UnicodeType(ustr)

CharCodeAt(str, index) 返回指定位置字符的码点,UnicodeType 则按码点直接输入字符。这在处理某些输入法环境下普通 Type 失效的字符时很有用。

5.3 敲击按键:KeyTap

KeyTap 用于“按下并立即松开”一个按键,是触发快捷键的主力函数。它的第一个参数是主键,后面可跟随任意数量的修饰键:

// 单个按键
robotgo.KeyTap("enter")
robotgo.KeyTap("a")

// 组合键:主键 + 修饰键
robotgo.KeyTap("a", "ctrl")          // Ctrl + A
robotgo.KeyTap("i", "alt", "cmd")    // Alt + Cmd + I

// 修饰键也可以用字符串切片传入
arr := []string{"alt", "cmd"}
robotgo.KeyTap("i", arr)

修饰键的传入方式很灵活:既可以作为多个独立参数,也可以打包成一个 []string。两种写法等价。

5.4 切换按键状态:KeyToggle

当你需要“按住某键不放”或精确控制按下/松开时机时,使用 KeyToggle

robotgo.KeyToggle("a")        // 按下 a 键
robotgo.KeyToggle("a", "up")  // 松开 a 键

省略第二个参数(或传 "down")表示按下,"up" 表示松开。这对于游戏中“持续按住某方向键移动”之类的场景非常有用。

5.5 控制键盘节奏:KeySleep

与鼠标的 MouseSleep 对应,键盘有 KeySleep 全局变量,用于在每次键盘操作后自动等待指定毫秒数:

robotgo.KeySleep = 100 // 每次按键操作后等待 100 毫秒
robotgo.KeyTap("enter")
robotgo.KeyTap("i", "alt", "cmd")

合理设置 KeySleep 可以避免目标程序“跟不上”输入速度而丢键。

5.6 按键名称完整参考

RobotGo 支持非常丰富的按键名称。下面按类别整理(来自官方 keys 文档)。

5.6.1 基础字符键

A-Z a-z 0-9

字母和数字直接用对应字符表示。

5.6.2 控制与编辑键

backspace  delete  enter  tab  esc / escape
up  down  left  right          (方向键)
home  end  pageup  pagedown
insert  space  print  printscreen(macOS 不支持 printscreen)
menu(仅 Windows)

5.6.3 功能键

f1 f2 f3 ... f24

支持 F1 到 F24 共 24 个功能键。

5.6.4 修饰键

cmd      在 Windows 上即 "win" 键
cmdl     左 command       cmdr  右 command
alt      altl 左 alt       altr  右 alt
ctrl     ctrll 左 ctrl      ctrlr 右 ctrl
control
shift    shiftl 左 shift    shiftr 右 shift
capslock

注意 cmd 在 Windows 上对应 Win 键,在 macOS 上对应 Command 键。

5.6.5 多媒体音量键

audio_mute       静音
audio_vol_down   降低音量
audio_vol_up     提高音量
audio_play
audio_stop
audio_pause
audio_prev       上一曲
audio_next       下一曲
audio_rewind     (仅 Linux)
audio_forward    (仅 Linux)
audio_repeat     (仅 Linux)
audio_random     (仅 Linux)

5.6.6 小键盘(Numpad)

num0 num1 ... num9   num_lock
num.  num+  num-  num*  num/
num_clear  num_enter  num_equal

5.6.7 其他特殊键

scroll_lock  pause_break

lights_mon_up     调高显示器亮度    (Windows 不支持)
lights_mon_down   调低显示器亮度    (Windows 不支持)
lights_kbd_toggle 切换键盘背光      (Windows 不支持)
lights_kbd_up     调高键盘背光      (Windows 不支持)
lights_kbd_down   调低键盘背光      (Windows 不支持)

部分按键存在平台差异,使用前请留意上表中的平台限制说明。

5.7 常用快捷键示例

下面是一些跨场景的常用快捷键写法(Windows/Linux 用 ctrl,macOS 通常用 cmd):

robotgo.KeyTap("a", "ctrl") // 全选
robotgo.KeyTap("c", "ctrl") // 复制
robotgo.KeyTap("v", "ctrl") // 粘贴
robotgo.KeyTap("x", "ctrl") // 剪切
robotgo.KeyTap("z", "ctrl") // 撤销
robotgo.KeyTap("s", "ctrl") // 保存
robotgo.KeyTap("f", "ctrl") // 查找
robotgo.KeyTap("w", "ctrl") // 关闭标签/窗口
robotgo.KeyTap("t", "ctrl") // 新建标签
robotgo.KeyTap("tab", "alt") // 切换窗口(Windows)

5.8 完整示例

下面是官方键盘示例的整理版:

package main

import (
    "fmt"

    "github.com/go-vgo/robotgo"
)

func main() {
    robotgo.Type("Hello World")
    robotgo.Type("だんしゃり", 0, 1)

    robotgo.Type("Hi, Seattle space needle, Golden gate bridge.")
    robotgo.Type("こんにちは世界.")
    robotgo.Sleep(1)

    // 按 Unicode 码点输入
    ustr := uint32(robotgo.CharCodeAt("Test", 0))
    robotgo.UnicodeType(ustr)

    robotgo.KeySleep = 100
    robotgo.KeyTap("enter")
    robotgo.KeyTap("i", "alt", "cmd")

    arr := []string{"alt", "cmd"}
    robotgo.KeyTap("i", arr)

    robotgo.MilliSleep(100)
    robotgo.KeyToggle("a")
    robotgo.KeyToggle("a", "up")

    // 剪贴板配合
    robotgo.WriteAll("Test")
    text, err := robotgo.ReadAll()
    if err == nil {
        fmt.Println(text)
    }
}

5.9 实战技巧与注意事项

  1. 跨平台修饰键:复制粘贴等操作 macOS 用 cmd、Windows/Linux 用 ctrl。可根据 runtime.GOOS 动态选择修饰键,写出真正跨平台的脚本。
  2. 大段文本走剪贴板:长文本用 Type 既慢又容易丢字,改用剪贴板粘贴更稳。
  3. 输入法干扰:在中文输入法激活状态下,Type 英文有时会被输入法拦截或转换。自动化前可先切换到英文输入法,或使用 UnicodeType
  4. 防丢键:高频按键时适当增大 KeySleep,给目标程序留出处理时间。
  5. 务必松开:使用 KeyToggle 按下按键后,要确保有对应的 "up" 调用松开,否则会出现“按键卡住”的现象。

5.10 小结

本章我们完整梳理了 RobotGo 的键盘能力:用 Type / UnicodeType 输入文本,用 KeyTap 敲击按键与组合键,用 KeyToggle 控制按键状态,并用 KeySleep 调节节奏。我们还提供了完整的按键名称参考表和常用快捷键示例。下一章将进入屏幕与像素操作,让你的自动化程序具备“看见屏幕”的能力。