[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-go-vgo--robotgo":3,"tool-go-vgo--robotgo":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",154349,2,"2026-04-13T23:32:16",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":76,"owner_email":76,"owner_twitter":76,"owner_website":76,"owner_url":77,"languages":78,"stars":99,"forks":100,"last_commit_at":101,"license":102,"difficulty_score":103,"env_os":104,"env_gpu":105,"env_ram":105,"env_deps":106,"category_tags":119,"github_topics":122,"view_count":32,"oss_zip_url":76,"oss_zip_packed_at":76,"status":17,"created_at":137,"updated_at":138,"faqs":139,"releases":170},7275,"go-vgo\u002Frobotgo","robotgo","RobotGo, Go Native cross-platform RPA, GUI automation, Auto test and Computer use  @vcaesar","RobotGo 是一款基于 Go 语言原生的跨平台桌面自动化工具，旨在帮助开发者轻松实现鼠标控制、键盘模拟、屏幕图像识别、窗口管理及全局事件监听等功能。它主要解决了在不同操作系统（Mac、Windows、Linux）上编写自动化脚本时面临的兼容性难题，让用户只需一套代码即可在多种环境中运行，广泛应用于自动化测试（RPA）、重复性任务处理及 AI 智能体交互场景。\n\n这款工具特别适合具备一定编程基础的开发者、测试工程师以及希望构建自定义自动化流程的技术研究人员使用。其核心亮点在于“原生”与“轻量”：无需依赖庞大的外部框架，直接调用系统底层 API，确保了执行的高效性与稳定性。同时，RobotGo 提供了丰富的图像处理与位图操作能力，支持复杂的视觉识别任务。虽然配置环境需要安装 GCC 等基础编译工具，但其强大的跨架构支持（包括 arm64 和 x86）使其成为构建高性能桌面自动化应用的理想选择。","# Robotgo\n\n\u003C!-- \u003Cimg align=\"right\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fgo-vgo\u002Frobotgo\u002Fmaster\u002Flogo.jpg\"> -->\n\u003C!-- [![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgo-vgo\u002Frobotgo\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgo-vgo\u002Frobotgo) -->\n\n[![Build Status](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fworkflows\u002FGo\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcommits\u002Fmaster)\n[![CircleCI Status](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fgo-vgo\u002Frobotgo.svg?style=shield)](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fgo-vgo\u002Frobotgo)\n[![Go Report Card](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgo-vgo_robotgo_readme_2b4a70945b89.png)](https:\u002F\u002Fgoreportcard.com\u002Freport\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo)\n[![GoDoc](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgo-vgo_robotgo_readme_ff803135673c.png)](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo?tab=doc)\n[![GitHub release](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Fgo-vgo\u002Frobotgo.svg)](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Freleases\u002Flatest)\n\n> Golang Desktop Automation, auto test and AI Computer Use. \u003Cbr>\n> Control the mouse, keyboard, read the screen, process, Window Handle, image and bitmap and global event listener.\n\nRobotGo supports Mac, Windows, and Linux (X11); and robotgo supports arm64 and x86-amd64.\n\n[RobotGo-Pro](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Frobotgo-pro) get the JavaScript, Python, Lua and others version, tech supports, new features and newest robotgo version (such as Wayland support, \"no open-source version now\").\n\n## Contents\n\n- [Docs](#docs)\n- [Binding](#binding)\n- [Requirements](#requirements)\n- [Installation](#installation)\n- [Update](#update)\n- [Examples](#examples)\n- [Type Conversion and keys](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fdocs\u002Fkeys.md)\n- [Cross-Compiling](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fdocs\u002Finstall.md#crosscompiling)\n- [Authors](#authors)\n- [Plans](#plans)\n- [License](#license)\n\n## Docs\n\n- [GoDoc](https:\u002F\u002Fgodoc.org\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo) \u003Cbr>\n- [API Docs](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fdocs\u002Fdoc.md) (Deprecated, no updated)\n\n## Binding:\n\n[ADB](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fadb), packaging android adb API.\n\n## Requirements:\n\nNow, Please make sure `Golang, GCC` is installed correctly before installing RobotGo.\n\n### ALL:\n\n```\nGolang\n\nGCC\n```\n\n#### For MacOS:\n\n```\nbrew install go\n```\n\nXcode Command Line Tools; \u003Cbr>\nAnd Privacy setting, add Screen Recording and Accessibility under: \u003Cbr>\n`System Settings > Privacy & Security > Accessibility, Screen & System Audio Recording`.\n\n```\nxcode-select --install\n```\n\n#### For Windows:\n\n```\nwinget install Golang.go\n```\n\n[llvm-mingw](https:\u002F\u002Fgithub.com\u002Fmstorsjo\u002Fllvm-mingw)\n\n```\nwinget install MartinStorsjo.LLVM-MinGW.UCRT\n```\n\nor [Mingw-w64](https:\u002F\u002Fsourceforge.net\u002Fprojects\u002Fmingw-w64\u002Ffiles)\n\n```\nwinget install BrechtSanders.WinLibs.POSIX.UCRT\n```\n\nOr Download the [Mingw-w64](https:\u002F\u002Fsourceforge.net\u002Fprojects\u002Fmingw-w64\u002Ffiles) and the others gcc, then set system environment variables like `C:\\mingw64\\bin` to the env `Path`.\n[Set environment variables to run GCC from command line](https:\u002F\u002Fwww.youtube.com\u002Fresults?search_query=Set+environment+variables+to+run+GCC+from+command+line).\n\n`Or The others GCC` (Except the Mingw-w64, you should compile the \"libpng\" with yourself when use the [bitmap](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fbitmap).)\n\n#### For everything else:\n\n```\nGCC\n\nX11 with the XTest extension (the Xtst library)\n\n\"Clipboard\": xsel xclip\n\n\"Bitmap\": libpng (Just used by the \"bitmap\".)\n\n\"Event-Gohook\": xcb, xkb, libxkbcommon (Just used by the \"hook\".)\n```\n\n##### Ubuntu:\n\n```yml\n# sudo apt install golang\nsudo snap install go  --classic\n\n# gcc\nsudo apt install gcc libc6-dev\n\n# x11\nsudo apt install libx11-dev xorg-dev libxtst-dev\n\n# Clipboard\nsudo apt install xsel xclip\n\n# Bitmap\nsudo apt install libpng++-dev\n\n# GoHook\nsudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-dev\n```\n\n##### Fedora:\n\n```yml\n# x11\nsudo dnf install libXtst-devel\n\n# Clipboard\nsudo dnf install xsel xclip\n\n# Bitmap\nsudo dnf install libpng-devel\n\n# GoHook\nsudo dnf install libxkbcommon-devel libxkbcommon-x11-devel xorg-x11-xkb-utils-devel\n```\n\n## Installation:\n\nWith Go module support (Go 1.11+), just import:\n\n```go\nimport \"github.com\u002Fgo-vgo\u002Frobotgo\"\n```\n\nOtherwise, to install the robotgo package, run the command:\n\n```\ngo get github.com\u002Fgo-vgo\u002Frobotgo\n```\n\npng.h: No such file or directory? Please see [issues\u002F47](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F47).\n\n## Update:\n\n```\ngo get -u github.com\u002Fgo-vgo\u002Frobotgo\n```\n\nNote go1.10.x C file compilation cache problem, [golang #24355](https:\u002F\u002Fgithub.com\u002Fgolang\u002Fgo\u002Fissues\u002F24355).\n`go mod vendor` problem, [golang #26366](https:\u002F\u002Fgithub.com\u002Fgolang\u002Fgo\u002Fissues\u002F26366).\n\n## [Examples:](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples)\n\n#### [Mouse](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fmouse\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n)\n\nfunc main() {\n  robotgo.MouseSleep = 300\n\n  robotgo.Move(100, 100)\n  fmt.Println(robotgo.Location())\n  robotgo.Move(100, -200) \u002F\u002F multi screen supported\n  robotgo.MoveSmooth(120, -150)\n  fmt.Println(robotgo.Location())\n\n  robotgo.ScrollDir(10, \"up\")\n  robotgo.ScrollDir(20, \"right\")\n\n  robotgo.Scroll(0, -10)\n  robotgo.Scroll(100, 0)\n\n  robotgo.MilliSleep(100)\n  robotgo.ScrollSmooth(-10, 6)\n  \u002F\u002F robotgo.ScrollRelative(10, -100)\n\n  robotgo.Move(10, 20)\n  robotgo.MoveRelative(0, -10)\n  robotgo.DragSmooth(10, 10)\n\n  robotgo.Click(\"wheelRight\")\n  robotgo.Click(\"left\", true)\n  robotgo.MoveSmooth(100, 200, 1.0, 10.0)\n\n  robotgo.Toggle(\"left\")\n  robotgo.Toggle(\"left\", \"up\")\n}\n```\n\n#### [Keyboard](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fkey\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n)\n\nfunc main() {\n  robotgo.Type(\"Hello World\")\n  robotgo.Type(\"だんしゃり\", 0, 1)\n  \u002F\u002F robotgo.Type(\"テストする\")\n\n  robotgo.Type(\"Hi, Seattle space needle, Golden gate bridge, One world trade center.\")\n  robotgo.Type(\"Hi galaxy, hi stars, hi MT.Rainier, hi sea. こんにちは世界.\")\n  robotgo.Sleep(1)\n\n  \u002F\u002F ustr := uint32(robotgo.CharCodeAt(\"Test\", 0))\n  \u002F\u002F robotgo.UnicodeType(ustr)\n\n  robotgo.KeySleep = 100\n  robotgo.KeyTap(\"enter\")\n  \u002F\u002F robotgo.Type(\"en\")\n  robotgo.KeyTap(\"i\", \"alt\", \"cmd\")\n\n  arr := []string{\"alt\", \"cmd\"}\n  robotgo.KeyTap(\"i\", arr)\n\n  robotgo.MilliSleep(100)\n  robotgo.KeyToggle(\"a\")\n  robotgo.KeyToggle(\"a\", \"up\")\n\n  robotgo.WriteAll(\"Test\")\n  text, err := robotgo.ReadAll()\n  if err == nil {\n    fmt.Println(text)\n  }\n}\n```\n\n#### [Screen](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fscreen\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n  \"strconv\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  \"github.com\u002Fvcaesar\u002Fimgo\"\n)\n\nfunc main() {\n  x, y := robotgo.Location()\n  fmt.Println(\"pos: \", x, y)\n\n  color := robotgo.GetPixelColor(100, 200)\n  fmt.Println(\"color---- \", color)\n\n  sx, sy := robotgo.GetScreenSize()\n  fmt.Println(\"get screen size: \", sx, sy)\n\n  bit := robotgo.CaptureScreen(10, 10, 30, 30)\n  defer robotgo.FreeBitmap(bit)\n\n  img := robotgo.ToImage(bit)\n  imgo.Save(\"test.png\", img)\n\n  num := robotgo.DisplaysNum()\n  for i := 0; i \u003C num; i++ {\n    robotgo.DisplayID = i\n    img1, _ := robotgo.CaptureImg()\n    path1 := \"save_\" + strconv.Itoa(i)\n    robotgo.Save(img1, path1+\".png\")\n    robotgo.SaveJpeg(img1, path1+\".jpeg\", 50)\n\n    img2, _ := robotgo.CaptureImg(10, 10, 20, 20)\n    robotgo.Save(img2, \"test_\"+strconv.Itoa(i)+\".png\")\n\n    x, y, w, h := robotgo.GetDisplayBounds(i)\n    img3, err := robotgo.CaptureImg(x, y, w, h)\n    fmt.Println(\"Capture error: \", err)\n    robotgo.Save(img3, path1+\"_1.png\")\n  }\n}\n```\n\n#### [Bitmap](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fbitmap\u002Fblob\u002Fmain\u002Fexamples\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  \"github.com\u002Fvcaesar\u002Fbitmap\"\n)\n\nfunc main() {\n  bit := robotgo.CaptureScreen(10, 20, 30, 40)\n  \u002F\u002F use `defer robotgo.FreeBitmap(bit)` to free the bitmap\n  defer robotgo.FreeBitmap(bit)\n\n  fmt.Println(\"bitmap...\", bit)\n  img := robotgo.ToImage(bit)\n  \u002F\u002F robotgo.SavePng(img, \"test_1.png\")\n  robotgo.Save(img, \"test_1.png\")\n\n  bit2 := robotgo.ToCBitmap(robotgo.ImgToBitmap(img))\n  fx, fy := bitmap.Find(bit2)\n  fmt.Println(\"FindBitmap------ \", fx, fy)\n  robotgo.Move(fx, fy)\n\n  arr := bitmap.FindAll(bit2)\n  fmt.Println(\"Find all bitmap: \", arr)\n\n  fx, fy = bitmap.Find(bit)\n  fmt.Println(\"FindBitmap------ \", fx, fy)\n\n  bitmap.Save(bit, \"test.png\")\n}\n```\n\n#### [OpenCV](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fgcv)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n  \"math\u002Frand\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  \"github.com\u002Fvcaesar\u002Fgcv\"\n  \"github.com\u002Fvcaesar\u002Fbitmap\"\n)\n\nfunc main() {\n  opencv()\n}\n\nfunc opencv() {\n  name := \"test.png\"\n  name1 := \"test_001.png\"\n  robotgo.SaveCapture(name1, 10, 10, 30, 30)\n  robotgo.SaveCapture(name)\n\n  fmt.Print(\"gcv find image: \")\n  fmt.Println(gcv.FindImgFile(name1, name))\n  fmt.Println(gcv.FindAllImgFile(name1, name))\n\n  bit := bitmap.Open(name1)\n  defer robotgo.FreeBitmap(bit)\n  fmt.Print(\"find bitmap: \")\n  fmt.Println(bitmap.Find(bit))\n\n  \u002F\u002F bit0 := robotgo.CaptureScreen()\n  \u002F\u002F img := robotgo.ToImage(bit0)\n  \u002F\u002F bit1 := robotgo.CaptureScreen(10, 10, 30, 30)\n  \u002F\u002F img1 := robotgo.ToImage(bit1)\n  \u002F\u002F defer robotgo.FreeBitmapArr(bit0, bit1)\n  img, _ := robotgo.CaptureImg()\n  img1, _ := robotgo.CaptureImg(10, 10, 30, 30)\n\n  fmt.Print(\"gcv find image: \")\n  fmt.Println(gcv.FindImg(img1, img))\n  fmt.Println()\n\n  res := gcv.FindAllImg(img1, img)\n  fmt.Println(res[0].TopLeft.Y, res[0].Rects.TopLeft.X, res)\n  x, y := res[0].TopLeft.X, res[0].TopLeft.Y\n  robotgo.Move(x, y-rand.Intn(5))\n  robotgo.MilliSleep(100)\n  robotgo.Click()\n\n  res = gcv.FindAll(img1, img) \u002F\u002F use find template and sift\n  fmt.Println(\"find all: \", res)\n  res1 := gcv.Find(img1, img)\n  fmt.Println(\"find: \", res1)\n\n  img2, _, _ := robotgo.DecodeImg(\"test_001.png\")\n  x, y = gcv.FindX(img2, img)\n  fmt.Println(x, y)\n}\n```\n\n#### [Event](https:\u002F\u002Fgithub.com\u002Frobotn\u002Fgohook\u002Fblob\u002Fmaster\u002Fexamples\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \u002F\u002F \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  hook \"github.com\u002Frobotn\u002Fgohook\"\n)\n\nfunc main() {\n  add()\n  low()\n  event()\n}\n\nfunc add() {\n  fmt.Println(\"--- Please press ctrl + shift + q to stop hook ---\")\n  hook.Register(hook.KeyDown, []string{\"q\", \"ctrl\", \"shift\"}, func(e hook.Event) {\n    fmt.Println(\"ctrl-shift-q\")\n    hook.End()\n  })\n\n  fmt.Println(\"--- Please press w---\")\n  hook.Register(hook.KeyDown, []string{\"w\"}, func(e hook.Event) {\n    fmt.Println(\"w\")\n  })\n\n  s := hook.Start()\n  \u003C-hook.Process(s)\n}\n\nfunc low() {\n\tevChan := hook.Start()\n\tdefer hook.End()\n\n\tfor ev := range evChan {\n\t\tfmt.Println(\"hook: \", ev)\n\t}\n}\n\nfunc event() {\n  ok := hook.AddEvents(\"q\", \"ctrl\", \"shift\")\n  if ok {\n    fmt.Println(\"add events...\")\n  }\n\n  keve := hook.AddEvent(\"k\")\n  if keve {\n    fmt.Println(\"you press... \", \"k\")\n  }\n\n  mleft := hook.AddEvent(\"mleft\")\n  if mleft {\n    fmt.Println(\"you press... \", \"mouse left button\")\n  }\n}\n```\n\n#### [Window](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fwindow\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n)\n\nfunc main() {\n  fpid, err := robotgo.FindIds(\"Google\")\n  if err == nil {\n    fmt.Println(\"pids... \", fpid)\n\n    if len(fpid) > 0 {\n      robotgo.Type(\"Hi galaxy!\", fpid[0])\n      robotgo.KeyTap(\"a\", fpid[0], \"cmd\")\n\n      robotgo.KeyToggle(\"a\", fpid[0])\n      robotgo.KeyToggle(\"a\", fpid[0], \"up\")\n\n      robotgo.ActivePid(fpid[0])\n\n      robotgo.Kill(fpid[0])\n    }\n  }\n\n  robotgo.ActiveName(\"chrome\")\n\n  isExist, err := robotgo.PidExists(100)\n  if err == nil && isExist {\n    fmt.Println(\"pid exists is\", isExist)\n\n    robotgo.Kill(100)\n  }\n\n  abool := robotgo.Alert(\"test\", \"robotgo\")\n  if abool {\n \t  fmt.Println(\"ok@@@ \", \"ok\")\n  }\n\n  title := robotgo.GetTitle()\n  fmt.Println(\"title@@@ \", title)\n}\n```\n\n## Authors\n\n- [The author is Evans](https:\u002F\u002Fgithub.com\u002Fvcaesar)\n- [Maintainers](https:\u002F\u002Fgithub.com\u002Forgs\u002Fgo-vgo\u002Fpeople)\n\n## Plans\n\n- Refactor some C code to Go (such as x11, windows)\n- Better multiscreen support\n- Wayland support\n- Update Window Handle\n- Try to support Android and IOS\n\n## Contributors\n\n- See [contributors page](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fgraphs\u002Fcontributors) for full list of contributors.\n- See [Contribution Guidelines](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md).\n\n## License\n\nRobotgo is primarily distributed under the terms of \"the Apache License (Version 2.0)\", with portions covered by various BSD-like licenses.\n\nSee [LICENSE-APACHE](http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0), [LICENSE](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002FLICENSE).\n","# Robotgo\n\n\u003C!-- \u003Cimg align=\"right\" src=\"https:\u002F\u002Fraw.githubusercontent.com\u002Fgo-vgo\u002Frobotgo\u002Fmaster\u002Flogo.jpg\"> -->\n\u003C!-- [![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgo-vgo\u002Frobotgo\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fgo-vgo\u002Frobotgo) -->\n\n[![构建状态](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fworkflows\u002FGo\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcommits\u002Fmaster)\n[![CircleCI 状态](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fgo-vgo\u002Frobotgo.svg?style=shield)](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fgo-vgo\u002Frobotgo)\n[![Go Report Card](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgo-vgo_robotgo_readme_2b4a70945b89.png)](https:\u002F\u002Fgoreportcard.com\u002Freport\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo)\n[![GoDoc](https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgo-vgo_robotgo_readme_ff803135673c.png)](https:\u002F\u002Fpkg.go.dev\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo?tab=doc)\n[![GitHub 发布](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Fgo-vgo\u002Frobotgo.svg)](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Freleases\u002Flatest)\n\n> Golang 桌面自动化、自动化测试及人工智能计算机应用。\u003Cbr>\n> 控制鼠标、键盘，读取屏幕内容，处理窗口句柄、图像和位图，以及全局事件监听。\n\nRobotGo 支持 macOS、Windows 和 Linux (X11)；同时支持 arm64 和 x86-amd64 架构。\n\n[RobotGo-Pro](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Frobotgo-pro) 提供 JavaScript、Python、Lua 等版本的支持，技术协助、新功能以及最新版的 RobotGo（例如 Wayland 支持，“目前无开源版本”）。\n\n## 目录\n\n- [文档](#docs)\n- [绑定](#binding)\n- [要求](#requirements)\n- [安装](#installation)\n- [更新](#update)\n- [示例](#examples)\n- [类型转换与按键](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fdocs\u002Fkeys.md)\n- [交叉编译](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fdocs\u002Finstall.md#crosscompiling)\n- [作者](#authors)\n- [计划](#plans)\n- [许可证](#license)\n\n## 文档\n\n- [GoDoc](https:\u002F\u002Fgodoc.org\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo) \u003Cbr>\n- [API 文档](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fdocs\u002Fdoc.md)（已弃用，未更新）\n\n## 绑定：\n\n[ADB](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fadb)，封装了 Android ADB API。\n\n## 要求：\n\n现在，请确保在安装 RobotGo 之前，`Golang` 和 `GCC` 已正确安装。\n\n### 全部：\n\n```\nGolang\n\nGCC\n```\n\n#### 对于 macOS：\n\n```\nbrew install go\n```\n\nXcode 命令行工具；\u003Cbr>\n并且需要在隐私设置中添加“屏幕录制”和“辅助功能”权限： \u003Cbr>\n`系统设置 > 隐私与安全性 > 辅助功能、屏幕与系统音频录制`。\n\n```\nxcode-select --install\n```\n\n#### 对于 Windows：\n\n```\nwinget install Golang.go\n```\n\n[llvm-mingw](https:\u002F\u002Fgithub.com\u002Fmstorsjo\u002Fllvm-mingw)\n\n```\nwinget install MartinStorsjo.LLVM-MinGW.UCRT\n```\n\n或者 [Mingw-w64](https:\u002F\u002Fsourceforge.net\u002Fprojects\u002Fmingw-w64\u002Ffiles)\n\n```\nwinget install BrechtSanders.WinLibs.POSIX.UCRT\n```\n\n或者下载 [Mingw-w64](https:\u002F\u002Fsourceforge.net\u002Fprojects\u002Fmingw-w64\u002Ffiles) 及其他 GCC 编译器，然后将类似 `C:\\mingw64\\bin` 的路径添加到系统的环境变量 `Path` 中。\u003Cbr>\n[设置环境变量以便从命令行运行 GCC](https:\u002F\u002Fwww.youtube.com\u002Fresults?search_query=Set+environment+variables+to+run+GCC+from+command+line)。\n\n`或者使用其他 GCC`（除了 Mingw-w64 外，使用 [bitmap](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fbitmap) 时需自行编译 “libpng”）。\n\n#### 对于其他所有系统：\n\n```\nGCC\n\nX11 并配备 XTest 扩展（Xtst 库）\n\n“剪贴板”：xsel、xclip\n\n“位图”：libpng（仅用于 bitmap）\n\n“事件监听”：xcb、xkb、libxkbcommon（仅用于 hook）\n```\n\n##### Ubuntu：\n\n```yml\n# sudo apt install golang\nsudo snap install go  --classic\n\n# gcc\nsudo apt install gcc libc6-dev\n\n# x11\nsudo apt install libx11-dev xorg-dev libxtst-dev\n\n# 剪贴板\nsudo apt install xsel xclip\n\n# 位图\nsudo apt install libpng++-dev\n\n# GoHook\nsudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-dev\n```\n\n##### Fedora：\n\n```yml\n# x11\nsudo dnf install libXtst-devel\n\n# 剪贴板\nsudo dnf install xsel xclip\n\n# 位图\nsudo dnf install libpng-devel\n\n# GoHook\nsudo dnf install libxkbcommon-devel libxkbcommon-x11-devel xorg-x11-xkb-utils-devel\n```\n\n## 安装：\n\n如果支持 Go 模块（Go 1.11 及以上版本），只需导入：\n\n```go\nimport \"github.com\u002Fgo-vgo\u002Frobotgo\"\n```\n\n否则，要安装 robotgo 包，运行以下命令：\n\n```\ngo get github.com\u002Fgo-vgo\u002Frobotgo\n```\n\npng.h：没有这样的文件或目录？请参阅 [issues\u002F47](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F47)。\n\n## 更新：\n\n```\ngo get -u github.com\u002Fgo-vgo\u002Frobotgo\n```\n\n注意 go1.10.x C 文件编译缓存问题，[golang #24355](https:\u002F\u002Fgithub.com\u002Fgolang\u002Fgo\u002Fissues\u002F24355)。\u003Cbr>\n`go mod vendor` 问题，[golang #26366](https:\u002F\u002Fgithub.com\u002Fgolang\u002Fgo\u002Fissues\u002F26366)。\n\n## [示例：](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples)\n\n#### [鼠标](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fmouse\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n)\n\nfunc main() {\n  robotgo.MouseSleep = 300\n\n  robotgo.Move(100, 100)\n  fmt.Println(robotgo.Location())\n  robotgo.Move(100, -200) \u002F\u002F 支持多屏\n  robotgo.MoveSmooth(120, -150)\n  fmt.Println(robotgo.Location())\n\n  robotgo.ScrollDir(10, \"up\")\n  robotgo.ScrollDir(20, \"right\")\n\n  robotgo.Scroll(0, -10)\n  robotgo.Scroll(100, 0)\n\n  robotgo.MilliSleep(100)\n  robotgo.ScrollSmooth(-10, 6)\n  \u002F\u002F robotgo.ScrollRelative(10, -100)\n\n  robotgo.Move(10, 20)\n  robotgo.MoveRelative(0, -10)\n  robotgo.DragSmooth(10, 10)\n\n  robotgo.Click(\"wheelRight\")\n  robotgo.Click(\"left\", true)\n  robotgo.MoveSmooth(100, 200, 1.0, 10.0)\n\n  robotgo.Toggle(\"left\")\n  robotgo.Toggle(\"left\", \"up\")\n}\n```\n\n#### [键盘](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fkey\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n)\n\nfunc main() {\n  robotgo.Type(\"Hello World\")\n  robotgo.Type(\"だんしゃり\", 0, 1)\n  \u002F\u002F robotgo.Type(\"テストする\")\n\n  robotgo.Type(\"Hi, Seattle space needle, Golden gate bridge, One world trade center.\")\n  robotgo.Type(\"Hi galaxy, hi stars, hi MT.Rainier, hi sea. こんにちは世界.\")\n  robotgo.Sleep(1)\n\n  \u002F\u002F ustr := uint32(robotgo.CharCodeAt(\"Test\", 0))\n  \u002F\u002F robotgo.UnicodeType(ustr)\n\n  robotgo.KeySleep = 100\n  robotgo.KeyTap(\"enter\")\n  \u002F\u002F robotgo.Type(\"en\")\n  robotgo.KeyTap(\"i\", \"alt\", \"cmd\")\n\n  arr := []string{\"alt\", \"cmd\"}\n  robotgo.KeyTap(\"i\", arr)\n\n  robotgo.MilliSleep(100)\n  robotgo.KeyToggle(\"a\")\n  robotgo.KeyToggle(\"a\", \"up\")\n\n  robotgo.WriteAll(\"Test\")\n  text, err := robotgo.ReadAll()\n  if err == nil {\n    fmt.Println(text)\n  }\n}\n```\n\n#### [屏幕](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fscreen\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n  \"strconv\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  \"github.com\u002Fvcaesar\u002Fimgo\"\n)\n\nfunc main() {\n  x, y := robotgo.Location()\n  fmt.Println(\"pos: \", x, y)\n\n  color := robotgo.GetPixelColor(100, 200)\n  fmt.Println(\"color---- \", color)\n\n  sx, sy := robotgo.GetScreenSize()\n  fmt.Println(\"获取屏幕尺寸: \", sx, sy)\n\n  bit := robotgo.CaptureScreen(10, 10, 30, 30)\n  defer robotgo.FreeBitmap(bit)\n\n  img := robotgo.ToImage(bit)\n  imgo.Save(\"test.png\", img)\n\nnum := robotgo.DisplaysNum()\n  for i := 0; i \u003C num; i++ {\n    robotgo.DisplayID = i\n    img1, _ := robotgo.CaptureImg()\n    path1 := \"save_\" + strconv.Itoa(i)\n    robotgo.Save(img1, path1+\".png\")\n    robotgo.SaveJpeg(img1, path1+\".jpeg\", 50)\n\n    img2, _ := robotgo.CaptureImg(10, 10, 20, 20)\n    robotgo.Save(img2, \"test_\"+strconv.Itoa(i)+\".png\")\n\n    x, y, w, h := robotgo.GetDisplayBounds(i)\n    img3, err := robotgo.CaptureImg(x, y, w, h)\n    fmt.Println(\"Capture error: \", err)\n    robotgo.Save(img3, path1+\"_1.png\")\n  }\n}\n```\n\n#### [Bitmap](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fbitmap\u002Fblob\u002Fmain\u002Fexamples\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  \"github.com\u002Fvcaesar\u002Fbitmap\"\n)\n\nfunc main() {\n  bit := robotgo.CaptureScreen(10, 20, 30, 40)\n  \u002F\u002F 使用 `defer robotgo.FreeBitmap(bit)` 来释放位图\n  defer robotgo.FreeBitmap(bit)\n\n  fmt.Println(\"bitmap...\", bit)\n  img := robotgo.ToImage(bit)\n  \u002F\u002F robotgo.SavePng(img, \"test_1.png\")\n  robotgo.Save(img, \"test_1.png\")\n\n  bit2 := robotgo.ToCBitmap(robotgo.ImgToBitmap(img))\n  fx, fy := bitmap.Find(bit2)\n  fmt.Println(\"FindBitmap------ \", fx, fy)\n  robotgo.Move(fx, fy)\n\n  arr := bitmap.FindAll(bit2)\n  fmt.Println(\"Find all bitmap: \", arr)\n\n  fx, fy = bitmap.Find(bit)\n  fmt.Println(\"FindBitmap------ \", fx, fy)\n\n  bitmap.Save(bit, \"test.png\")\n}\n```\n\n#### [OpenCV](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Fgcv)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n  \"math\u002Frand\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  \"github.com\u002Fvcaesar\u002Fgcv\"\n  \"github.com\u002Fvcaesar\u002Fbitmap\"\n)\n\nfunc main() {\n  opencv()\n}\n\nfunc opencv() {\n  name := \"test.png\"\n  name1 := \"test_001.png\"\n  robotgo.SaveCapture(name1, 10, 10, 30, 30)\n  robotgo.SaveCapture(name)\n\n  fmt.Print(\"gcv find image: \")\n  fmt.Println(gcv.FindImgFile(name1, name))\n  fmt.Println(gcv.FindAllImgFile(name1, name))\n\n  bit := bitmap.Open(name1)\n  defer robotgo.FreeBitmap(bit)\n  fmt.Print(\"find bitmap: \")\n  fmt.Println(bitmap.Find(bit))\n\n  \u002F\u002F bit0 := robotgo.CaptureScreen()\n  \u002F\u002F img := robotgo.ToImage(bit0)\n  \u002F\u002F bit1 := robotgo.CaptureScreen(10, 10, 30, 30)\n  \u002F\u002F img1 := robotgo.ToImage(bit1)\n  \u002F\u002F defer robotgo.FreeBitmapArr(bit0, bit1)\n  img, _ := robotgo.CaptureImg()\n  img1, _ := robotgo.CaptureImg(10, 10, 30, 30)\n\n  fmt.Print(\"gcv find image: \")\n  fmt.Println(gcv.FindImg(img1, img))\n  fmt.Println()\n\n  res := gcv.FindAllImg(img1, img)\n  fmt.Println(res[0].TopLeft.Y, res[0].Rects.TopLeft.X, res)\n  x, y := res[0].TopLeft.X, res[0].TopLeft.Y\n  robotgo.Move(x, y-rand.Intn(5))\n  robotgo.MilliSleep(100)\n  robotgo.Click()\n\n  res = gcv.FindAll(img1, img) \u002F\u002F 使用模板匹配和SIFT算法\n  fmt.Println(\"find all: \", res)\n  res1 := gcv.Find(img1, img)\n  fmt.Println(\"find: \", res1)\n\n  img2, _, _ := robotgo.DecodeImg(\"test_001.png\")\n  x, y = gcv.FindX(img2, img)\n  fmt.Println(x, y)\n}\n```\n\n#### [Event](https:\u002F\u002Fgithub.com\u002Frobotn\u002Fgohook\u002Fblob\u002Fmaster\u002Fexamples\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \u002F\u002F \"github.com\u002Fgo-vgo\u002Frobotgo\"\n  hook \"github.com\u002Frobotn\u002Fgohook\"\n)\n\nfunc main() {\n  add()\n  low()\n  event()\n}\n\nfunc add() {\n  fmt.Println(\"--- 请按 ctrl + shift + q 停止钩子 ---\")\n  hook.Register(hook.KeyDown, []string{\"q\", \"ctrl\", \"shift\"}, func(e hook.Event) {\n    fmt.Println(\"ctrl-shift-q\")\n    hook.End()\n  })\n\n  fmt.Println(\"--- 请按 w 键 ---\")\n  hook.Register(hook.KeyDown, []string{\"w\"}, func(e hook.Event) {\n    fmt.Println(\"w\")\n  })\n\n  s := hook.Start()\n  \u003C-hook.Process(s)\n}\n\nfunc low() {\n\tevChan := hook.Start()\n\tdefer hook.End()\n\n\tfor ev := range evChan {\n\t\tfmt.Println(\"hook: \", ev)\n\t}\n}\n\nfunc event() {\n  ok := hook.AddEvents(\"q\", \"ctrl\", \"shift\")\n  if ok {\n    fmt.Println(\"add events...\")\n  }\n\n  keve := hook.AddEvent(\"k\")\n  if keve {\n    fmt.Println(\"you press... \", \"k\")\n  }\n\n  mleft := hook.AddEvent(\"mleft\")\n  if mleft {\n    fmt.Println(\"you press... \", \"鼠标左键\")\n  }\n}\n```\n\n#### [Window](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002Fexamples\u002Fwindow\u002Fmain.go)\n\n```Go\npackage main\n\nimport (\n  \"fmt\"\n\n  \"github.com\u002Fgo-vgo\u002Frobotgo\"\n)\n\nfunc main() {\n  fpid, err := robotgo.FindIds(\"Google\")\n  if err == nil {\n    fmt.Println(\"pids... \", fpid)\n\n    if len(fpid) > 0 {\n      robotgo.Type(\"Hi galaxy!\", fpid[0])\n      robotgo.KeyTap(\"a\", fpid[0], \"cmd\")\n\n      robotgo.KeyToggle(\"a\", fpid[0])\n      robotgo.KeyToggle(\"a\", fpid[0], \"up\")\n\n      robotgo.ActivePid(fpid[0])\n\n      robotgo.Kill(fpid[0])\n    }\n  }\n\n  robotgo.ActiveName(\"chrome\")\n\n  isExist, err := robotgo.PidExists(100)\n  if err == nil && isExist {\n    fmt.Println(\"pid exists is\", isExist)\n\n    robotgo.Kill(100)\n  }\n\n  abool := robotgo.Alert(\"test\", \"robotgo\")\n  if abool {\n \t  fmt.Println(\"ok@@@ \", \"ok\")\n  }\n\n  title := robotgo.GetTitle()\n  fmt.Println(\"title@@@ \", title)\n}\n```\n\n\n\n## 作者\n\n- [作者是 Evans](https:\u002F\u002Fgithub.com\u002Fvcaesar)\n- [维护者](https:\u002F\u002Fgithub.com\u002Forgs\u002Fgo-vgo\u002Fpeople)\n\n## 计划\n\n- 将部分 C 代码重构为 Go（例如 x11、windows）\n- 改进多屏幕支持\n- 支持 Wayland\n- 更新窗口句柄\n- 尝试支持 Android 和 iOS\n\n## 贡献者\n\n- 完整的贡献者列表请参见 [贡献者页面](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fgraphs\u002Fcontributors)。\n- 贡献指南请参见 [CONTRIBUTING.md](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002FCONTRIBUTING.md)。\n\n## 许可证\n\nRobotgo 主要根据“Apache 许可证（版本 2.0）”进行分发，其中部分内容受各种类似 BSD 的许可证保护。\n\n详情请参阅 [LICENSE-APACHE](http:\u002F\u002Fwww.apache.org\u002Flicenses\u002FLICENSE-2.0) 和 [LICENSE](https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fblob\u002Fmaster\u002FLICENSE)。","# RobotGo 快速上手指南\n\nRobotGo 是一个强大的 Golang 桌面自动化库，支持控制鼠标、键盘、读取屏幕、管理窗口进程以及图像识别。适用于 macOS、Windows 和 Linux (X11)。\n\n## 环境准备\n\n在开始之前，请确保系统已安装 **Golang** 和 **GCC** 编译器。不同操作系统的具体依赖如下：\n\n### 通用要求\n- **Golang**: 建议版本 1.11+\n- **GCC**: C 语言编译器\n\n### macOS\n1. 安装 Go 和 Xcode 命令行工具：\n   ```bash\n   brew install go\n   xcode-select --install\n   ```\n2. **重要权限设置**：\n   前往 `系统设置 > 隐私与安全性`，在 **辅助功能 (Accessibility)** 和 **屏幕录制 (Screen Recording)** 中授予终端或 IDE 相应权限，否则无法控制鼠标或截屏。\n\n### Windows\n1. 安装 Go：\n   ```powershell\n   winget install Golang.go\n   ```\n2. 安装 GCC (推荐 LLVM-MinGW 或 MinGW-w64)：\n   ```powershell\n   winget install MartinStorsjo.LLVM-MinGW.UCRT\n   ```\n   *或者下载 MinGW-w64 安装包，并将 `bin` 目录（如 `C:\\mingw64\\bin`）添加到系统环境变量 `Path` 中。*\n\n### Linux (以 Ubuntu\u002FDebian 为例)\n需要安装 X11 开发库、剪贴板工具及图像库：\n```bash\n# 安装 Go (或使用 snap)\nsudo apt install golang\n\n# 安装 GCC 及基础开发包\nsudo apt install gcc libc6-dev\n\n# 安装 X11 相关依赖\nsudo apt install libx11-dev xorg-dev libxtst-dev\n\n# 安装剪贴板工具\nsudo apt install xsel xclip\n\n# 安装图像处理和 Hook 相关依赖\nsudo apt install libpng++-dev xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev libxkbcommon-dev\n```\n\n## 安装步骤\n\n使用 Go Modules 管理项目（推荐），直接在代码中导入即可自动下载；或手动运行以下命令安装：\n\n```bash\ngo get github.com\u002Fgo-vgo\u002Frobotgo\n```\n\n如果在编译时遇到 `png.h: No such file or directory` 错误，请检查上述“环境准备”中是否已正确安装 `libpng` 相关开发库。\n\n## 基本使用\n\n以下是一个最简单的示例，演示如何移动鼠标、点击以及输入文本。\n\n创建 `main.go` 文件：\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com\u002Fgo-vgo\u002Frobotgo\"\n)\n\nfunc main() {\n\t\u002F\u002F 设置鼠标操作延迟 (毫秒)\n\trobotgo.MouseSleep = 100\n\n\t\u002F\u002F 1. 鼠标控制\n\t\u002F\u002F 移动鼠标到坐标 (100, 200)\n\trobotgo.Move(100, 200)\n\t\n\t\u002F\u002F 获取当前鼠标位置\n\tx, y := robotgo.Location()\n\tfmt.Printf(\"当前鼠标位置：%d, %d\\n\", x, y)\n\n\t\u002F\u002F 左键单击\n\trobotgo.Click(\"left\")\n\n\t\u002F\u002F 2. 键盘控制\n\t\u002F\u002F 输入字符串\n\trobotgo.Type(\"Hello RobotGo!\")\n\t\n\t\u002F\u002F 模拟按下回车键\n\trobotgo.KeyTap(\"enter\")\n\n\t\u002F\u002F 组合键：Alt + Cmd + i (Mac) 或 Alt + Ctrl + i (Win\u002FLinux)\n\trobotgo.KeyTap(\"i\", \"alt\", \"cmd\")\n\n\t\u002F\u002F 3. 剪贴板操作\n\trobotgo.WriteAll(\"这是一段测试文本\")\n\ttext, err := robotgo.ReadAll()\n\tif err == nil {\n\t\tfmt.Println(\"剪贴板内容:\", text)\n\t}\n}\n```\n\n运行程序：\n```bash\ngo run main.go\n```\n\n> **注意**：在 Linux 环境下运行可能需要设置 `DISPLAY` 环境变量（例如 `export DISPLAY=:0`）。在 macOS 上如果程序无反应，请再次检查“隐私与安全性”中的辅助功能权限。","某电商运营团队每天需跨 Windows 和 Mac 系统，从数十个后台网页抓取销售数据并汇总至本地 Excel，人工操作耗时且易错。\n\n### 没有 robotgo 时\n- **跨平台适配困难**：团队成员使用不同操作系统，需分别编写 Python (PyAutoGUI) 或 AutoHotkey 脚本，维护两套代码库成本极高。\n- **图像识别不稳定**：依赖简单的坐标点击，一旦网页布局微调或分辨率变化，脚本立即失效，需频繁人工介入修复。\n- **执行效率低下**：无法并行处理多窗口任务，每人每天需花费 2 小时重复进行“打开网页 - 复制 - 粘贴”的机械操作。\n- **异常处理缺失**：遇到弹窗广告或加载延迟时脚本直接崩溃，缺乏原生的全局事件监听机制来自动恢复流程。\n\n### 使用 robotgo 后\n- **一套代码通吃多端**：利用 robotgo 的跨平台特性，团队仅用 Go 语言编写一次逻辑，即可在 Windows、Mac 和 Linux 上无缝运行，统一了自动化标准。\n- **智能图像定位**：调用 robotgo 的位图查找功能，通过截图特征精准定位按钮而非死板坐标，即使页面微调也能稳定操作，大幅降低维护率。\n- **高性能并发执行**：借助 Go 语言的协程优势，结合 robotgo 控制鼠标键盘，可瞬间启动几十个并行任务，将每日汇总时间从 2 小时压缩至 5 分钟。\n- **健壮的全局监听**：利用全局事件钩子实时监测屏幕状态，遇到弹窗自动关闭、加载超时自动重试，实现了真正无人值守的自动化流程。\n\nrobotgo 通过原生跨平台能力和精准的视觉控制，将繁琐的人工报表流程转化为高效、稳定的自动化闭环，显著释放了人力价值。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fgo-vgo_robotgo_29808c62.png","go-vgo","vgo","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fgo-vgo_e2be36af.jpg","The Vgo Programming Language, AI; View with C & Golang & Es6",null,"https:\u002F\u002Fgithub.com\u002Fgo-vgo",[79,83,87,91,95],{"name":80,"color":81,"percentage":82},"Go","#00ADD8",47.2,{"name":84,"color":85,"percentage":86},"C","#555555",41.1,{"name":88,"color":89,"percentage":90},"Objective-C","#438eff",10.9,{"name":92,"color":93,"percentage":94},"HTML","#e34c26",0.5,{"name":96,"color":97,"percentage":98},"Dockerfile","#384d54",0.3,10681,953,"2026-04-12T18:12:16","Apache-2.0",4,"Linux, macOS, Windows","未说明",{"notes":107,"python":108,"dependencies":109},"该工具是基于 Golang 的桌面自动化库，非 Python AI 模型。macOS 用户需在系统设置中授予“辅助功能”和“屏幕录制”权限。Linux 用户需安装 X11 及相关扩展库（如 Ubuntu\u002FFedora 下的具体开发包）。Windows 用户需配置 GCC 环境变量。支持 arm64 和 x86-amd64 架构。","不适用 (基于 Golang)",[110,111,112,113,114,115,116,117,118],"Golang","GCC","X11 (Linux)","libxtst (Linux)","xsel\u002Fxclip (Linux)","libpng (Linux)","xcb\u002Flibxkbcommon (Linux)","Xcode Command Line Tools (macOS)","llvm-mingw 或 Mingw-w64 (Windows)",[13,15,120,52,35,121,16,14],"音频","其他",[123,124,125,126,64,127,128,129,130,131,132,133,134,135,136],"go","robot","golang","automation","c","hook","image","opencv","mouse","window","rpa","ai","auto-test","computer-use","2026-03-27T02:49:30.150509","2026-04-14T12:27:57.394271",[140,145,150,155,160,165],{"id":141,"question_zh":142,"answer_zh":143,"source_url":144},32664,"在 Windows 上编译时遇到 'fatal error: zlib.h: No such file or directory' 错误怎么办？","这是因为缺少 zlib 依赖库。解决方案如下：\n1. 下载 zlib-x64 包并解压到 TDM-GCC 目录中（参考链接：https:\u002F\u002Fgithub.com\u002Flowkey42\u002FMagnumOpus\u002Fwiki\u002FTDM-GCC-Mingw64-Installation#zlib-x64）。\n2. 或者，建议直接使用 MinGW-w64 而不是 TDM-GCC，因为项目测试主要基于 MinGW-w64。你可以从 https:\u002F\u002Fsourceforge.net\u002Fprojects\u002Fmingw-w64\u002Ffiles\u002F 下载 x86_64-posix 版本。\n3. 如果坚持使用当前编译器，也可以尝试手动编译 lpng 和 lzib 库。","https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F100",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},32665,"如何监听鼠标事件（包括左键、右键、滚轮及侧键）？","可以使用以下关键词来监听不同的鼠标事件：'mleft' (左键), 'mright' (右键), 'wheelDown' (滚轮下), 'wheelUp' (滚轮上), 'wheelLeft' (滚轮左), 'wheelRight' (滚轮右)。\n注意：对于带有“前进”和“后退”侧键的鼠标，早期版本可能支持有限，但可以通过上述基础事件进行扩展或等待后续版本更新支持更多特定按键。","https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F2",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},32666,"如何在键盘监听中拦截并替换按键（例如按下 K 时输入 A），以及如何操作功能键（F1, ESC 等）？","1. 若要取消原按键动作并替换（如按 K 出 A），可能需要使用停止事件 API (stop Event api)。\n2. 关于 F1, ESC, 小键盘等功能键的操作，维护者表示将在 v0.50.0 版本中添加支持。请确保升级到该版本或更高版本以获取完整的功能键支持。","https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F36",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},32667,"在 macOS 上运行 KeyTap 时出现 'segmentation violation' (段错误) 崩溃怎么办？","这是一个已知的 macOS 兼容性问题，特别是在处理单个字符（a-z, A-Z, 0-9）时。\n临时变通方法：在调用 KeyTap 时，在字符后添加一个空格或其他非目标字符。例如：\n- 错误写法：robotgo.KeyTap(\"a\")\n- 正确写法：robotgo.KeyTap(\"a \")\n这样通常可以避免崩溃并成功执行按键操作。该问题与底层的 keyCodeForChar 函数有关，建议关注后续版本修复。","https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F486",{"id":161,"question_zh":162,"answer_zh":163,"source_url":164},32668,"程序运行一段时间后抛出 'Maximum number of clients reached' 并导致段错误，如何解决？","这通常是由于频繁调用某些函数（如 GetPID）导致 X11 连接数耗尽引起的。该问题已在后续代码更新中修复（参考 PR #590）。\n解决方案：请升级 robotgo 到最新版本（高于 v0.50.0），维护者确认代码现已修复，不会再出现此错误。","https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F168",{"id":166,"question_zh":167,"answer_zh":168,"source_url":169},32669,"在 Ubuntu\u002FLinux 上运行时提示 'XkbGetKeyboard failed to locate a valid keyboard' 并导致段错误，有解决办法吗？","这是一个长期存在的 Linux 环境下的问题，通常与 X11 显示服务权限或配置有关。\n常见现象：报错 'No protocol specified' 和 'XOpenDisplay failure!'。\n目前状态：尽管多个用户（包括 Ubuntu 24.04 用户）反馈此问题，但截至最新数据，官方尚未提供确切的修复方案。建议检查当前用户是否有权限访问 X Server（尝试运行 'xhost +local:'），或者在以 root 权限运行时配置 DISPLAY 环境变量。如果问题依旧，可能需要等待官方后续更新。","https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fissues\u002F160",[171,176,181,186,191,196,201,206,211,216,221,226,231,235,239,243,247,251,255,259],{"id":172,"version":173,"summary_zh":174,"released_at":175},247406,"v1.0.2","## 变更内容\n* 更新：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F760 中更新 CI 和不安全指针\n* 添加：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F761 中添加更多常量 Key 支持\n* 更新：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F762 中更新 go mod\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv1.0.1...v1.0.2","2026-03-30T18:02:57",{"id":177,"version":178,"summary_zh":179,"released_at":180},247407,"v1.0.1","## 变更内容\n* 修复：由 @PekingSpades 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F751 中修复了 macOS 键盘函数中的 SIGSEGV\u002FSIGBUS 崩溃问题。\n* 修复：初始化 MData 和 AXUIElementRef，以避免 get_active 函数中的段错误，由 @PekingSpades 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F755 中完成。\n* 新增：添加返回错误的鼠标点击辅助函数（ClickE），由 @PekingSpades 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F750 中实现。\n* 新增：添加错误检查和 MultiClick 功能，并优化代码及 API，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F757 中完成。\n* 修复：在 macOS 上使用拖动事件实现平滑拖动，由 @PekingSpades 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F758 中完成。\n* 更新：优化 Click() 函数的代码，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F759 中完成。\n\n## 新贡献者\n* @PekingSpades 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F751 中完成了首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv1.0.0...v1.0.1","2026-02-27T16:40:45",{"id":182,"version":183,"summary_zh":184,"released_at":185},247408,"v1.0.0","## 变更内容\n\n# 新增\n* 新增：为 JS、Lua、Python 等语言添加 [Robotgo Pro](https:\u002F\u002Fgithub.com\u002Fvcaesar\u002Frobotgo-pro)\n* 新增：支持使用 OpenCV 查找图像\n* 新增：支持多显示器和缩放\n* 新增：支持 PID 事件\n\n# 更新\n* 更新：进行了大规模更新并修复了多个 bug\n* 更新：将部分 C 代码重构为 Go 语言\n* 更新：将 API 简化至 V1 版本\n* 更新：将事件和位图相关功能移至其他仓库\n* 更新：将文档迁移到 godoc\n\n# 其他\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F727 中简化了关键代码\n* 修复：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F728 中修复了返回键的问题\n* 修复：@cnwangjie 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F730 中修改为使用窗口引用而非应用引用获取 macOS 上的边界信息\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F734 中将旧文档移至归档\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F735 中将 CI 更新至最新版本\n* 新增：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F740 中新增自动释放按键标志，以修复相关问题\n* 新增：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F741 中增加了 cla.md 支持\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F742 中更新了 readme.md，去除了冗余内容\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F744 中更新了 go.mod 和 readme.md\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F745 中更新了 GitHub 模板\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F746 中更新了版权头部信息，并改进了 Windows 下 UTF-16 字符串的处理\n\n## 新贡献者\n* @cnwangjie 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F730 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.8...v1.0.0","2025-12-04T22:55:24",{"id":187,"version":188,"summary_zh":189,"released_at":190},247409,"v0.110.8","## 变更内容\n* 修复：修复了 macOS 的最低版本要求 #698，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F719 中完成\n* 更新：更新了导入语句，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F720 中完成\n* 更新：更新了 go mod 和 CI 配置，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F723 中完成\n* 修复：修复了默认按键切换的延迟问题，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F724 中完成\n* 更新：在 macOS 上使用 HID 事件，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F725 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.7...v0.110.8","2025-05-17T20:16:56",{"id":192,"version":193,"summary_zh":194,"released_at":195},247410,"v0.110.7","## 变更内容\n* 修复：修复了 Windows 缩放问题 #713，并由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F716 中更新了 readme.md\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.6...v0.110.7","2025-04-11T21:39:09",{"id":197,"version":198,"summary_zh":199,"released_at":200},247411,"v0.110.6","## 变更内容\n* 更新 README.md，由 @ronaldpetty 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F701 中完成\n* 更新：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F708 中更新了 go mod 文件\n* 重构：简化 Windows 平台下的鼠标移动实现，使用 set… 方法，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F711 中完成\n\n## 新贡献者\n* @ronaldpetty 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F701 中完成了首次贡献\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.5...v0.110.6","2025-03-08T23:07:04",{"id":202,"version":203,"summary_zh":204,"released_at":205},247412,"v0.110.5","## 变更内容\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F694 中更新了 readme.md\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F695 中更新了 go mod\n\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.4...v0.110.5","2024-10-07T21:18:13",{"id":207,"version":208,"summary_zh":209,"released_at":210},247413,"v0.110.4","## 变更内容\n* 更新：将缩放功能移至屏幕，并重命名 pub mdata，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F691 中完成。\n* 修复：在 macOS 15 中默认使用高捕获分辨率，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F692 中完成。\n* 修复捕获错误，由 @aohanhongzhi 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F663 中完成。\n* 更新：更新屏幕捕获代码及示例，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F693 中完成。\n\n## 新贡献者\n* @aohanhongzhi 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F663 中完成了首次贡献。\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.3...v0.110.4","2024-10-07T21:05:16",{"id":212,"version":213,"summary_zh":214,"released_at":215},247414,"v0.110.3","## 变更内容\n* 更新：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F675 中将 CI 更新至最新版本\n* 更新：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F681 中更新 go mod\n* 更新：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F682 中将 screengrab 更新为修复 macOS 15 的版本\n* 添加：由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F684 中导出 xClose 主显示器函数\n* 添加：导出 Handle 数据并添加更多窗口句柄相关函数 #683，由 @vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F685 中完成\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.2...v0.110.3","2024-09-17T20:59:22",{"id":217,"version":218,"summary_zh":219,"released_at":220},247415,"v0.110.2","## 变更内容\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F660 中更新了 CI 和 Dockerfile\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F661 中将 go mod 更新至最新版本\n* 更新：@vcaesar 在 https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F671 中添加了屏幕截图功能并更新了 go mod\n\n\n**完整变更日志**：https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.1...v0.110.2","2024-08-05T20:14:26",{"id":222,"version":223,"summary_zh":224,"released_at":225},247416,"v0.110.1","## What's Changed\r\n* Update: update readme.md by @vcaesar in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F622\r\n* Update: update readme.md by @vcaesar in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F623\r\n* fix: x11 capslock reference the wrong constant by @sleep2144985 in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F629\r\n* Add: add next Linux and Windows files by @vcaesar in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F630\r\n* Update: bump CI to newest by @vcaesar in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F643\r\n* chore: fix function names in comment by @rustfix in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F651\r\n* fix: DragSmooth Repeat Call MoveScale by @nzlov in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F649\r\n\r\n## New Contributors\r\n* @sleep2144985 made their first contribution in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F629\r\n* @rustfix made their first contribution in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F651\r\n* @nzlov made their first contribution in https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fpull\u002F649\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fgo-vgo\u002Frobotgo\u002Fcompare\u002Fv0.110.0...v0.110.1","2024-04-15T17:21:53",{"id":227,"version":228,"summary_zh":229,"released_at":230},247417,"v0.110.0","v1.0.0-rc3 for public.","2023-11-13T15:22:59",{"id":232,"version":233,"summary_zh":76,"released_at":234},247418,"v1.0.0-rc2.1","2023-09-03T19:17:22",{"id":236,"version":237,"summary_zh":76,"released_at":238},247419,"v1.0.0-rc2","2023-09-01T20:29:24",{"id":240,"version":241,"summary_zh":76,"released_at":242},247420,"v1.0.0-rc1","2023-01-24T22:57:43",{"id":244,"version":245,"summary_zh":76,"released_at":246},247421,"v1.0.0-beta6.2","2023-01-15T17:18:35",{"id":248,"version":249,"summary_zh":76,"released_at":250},247422,"v1.0.0-beta6.1","2023-01-12T00:11:38",{"id":252,"version":253,"summary_zh":76,"released_at":254},247423,"v1.0.0-beta6","2022-11-28T02:45:10",{"id":256,"version":257,"summary_zh":76,"released_at":258},247424,"v1.0.0-beta5.3","2022-06-24T04:16:22",{"id":260,"version":261,"summary_zh":76,"released_at":262},247425,"v1.0.0-beta5.2","2022-04-14T16:07:07"]