RobotGo, Go Native cross-platform GUI automation @vcaesar
Golang Desktop Automation. Control the mouse, keyboard, bitmap, read the screen, Window Handle and global event listener.
RobotGo supports Mac, Windows, and Linux(X11).
Robotn, binding JavaScript and other, support more language.
Now, Please make sure
Golang, GCCis installed correctly before installing RobotGo.
GolangGCC
Xcode Command Line Tools
MinGW-w64 (Use recommended) or other GCC
GCC, libpngX11 with the XTest extension (also known as the Xtst library)
Event:
xcb, xkb, libxkbcommon
sudo apt install gcc libc6-devsudo apt install libx11-dev xorg-dev libxtst-dev libpng++-dev
sudo apt install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev sudo apt install libxkbcommon-dev
sudo apt install xsel xclip
sudo dnf install libxkbcommon-devel libXtst-devel libxkbcommon-x11-devel xorg-x11-xkb-utils-develsudo dnf install libpng-devel
sudo dnf install xsel xclip
go get github.com/go-vgo/robotgo
It's that easy!
png.h: No such file or directory? Please see issues/47.
go get -u github.com/go-vgo/robotgo
Note go1.10.x C file compilation cache problem, golang #24355.
go mod vendorproblem, golang #26366.
package mainimport ( "github.com/go-vgo/robotgo" )
func main() { robotgo.ScrollMouse(10, "up") robotgo.MouseClick("left", true) robotgo.MoveMouseSmooth(100, 200, 1.0, 100.0) }
package mainimport ( "fmt"
"github.com/go-vgo/robotgo" )
func main() { robotgo.TypeStr("Hello World") robotgo.TypeStr("だんしゃり", 1.0) // robotgo.TypeString("テストする")
robotgo.TypeStr("Hi galaxy. こんにちは世界.") robotgo.Sleep(1)
// ustr := uint32(robotgo.CharCodeAt("Test", 0)) // robotgo.UnicodeType(ustr)
robotgo.KeyTap("enter") // robotgo.TypeString("en") robotgo.KeyTap("i", "alt", "command")
arr := []string{"alt", "command"} robotgo.KeyTap("i", arr)
robotgo.WriteAll("Test") text, err := robotgo.ReadAll() if err == nil { fmt.Println(text) } }
package mainimport ( "fmt"
"github.com/go-vgo/robotgo"
)
func main() { x, y := robotgo.GetMousePos() fmt.Println("pos: ", x, y)
color := robotgo.GetPixelColor(100, 200) fmt.Println("color---- ", color) }
package mainimport ( "fmt"
"github.com/go-vgo/robotgo"
)
func main() { bitmap := robotgo.CaptureScreen(10, 20, 30, 40) // use
defer robotgo.FreeBitmap(bit)
to free the bitmap defer robotgo.FreeBitmap(bitmap)fmt.Println("...", bitmap)
fx, fy := robotgo.FindBitmap(bitmap) fmt.Println("FindBitmap------ ", fx, fy)
robotgo.SaveBitmap(bitmap, "test.png") }
package mainimport ( "fmt"
"github.com/go-vgo/robotgo" hook "github.com/robotn/gohook" )
func main() { add() low() event() }
func add() { fmt.Println("--- Please press ctrl + shift + q to stop hook ---") robotgo.EventHook(hook.KeyDown, []string{"q", "ctrl", "shift"}, func(e hook.Event) { fmt.Println("ctrl-shift-q") robotgo.EventEnd() })
fmt.Println("--- Please press w---") robotgo.EventHook(hook.KeyDown, []string{"w"}, func(e hook.Event) { fmt.Println("w") })
s := robotgo.EventStart()
Window
package mainimport ( "fmt"
"github.com/go-vgo/robotgo"
)
func main() { fpid, err := robotgo.FindIds("Google") if err == nil { fmt.Println("pids... ", fpid)
if len(fpid) > 0 { robotgo.ActivePID(fpid[0]) robotgo.Kill(fpid[0]) }
}
robotgo.ActiveName("chrome")
isExist, err := robotgo.PidExists(100) if err == nil && isExist { fmt.Println("pid exists is", isExist)
robotgo.Kill(100)
}
abool := robotgo.ShowAlert("test", "robotgo") if abool { fmt.Println("[email protected]@@ ", "ok") }
title := robotgo.GetTitle() fmt.Println("[email protected]@@ ", title) }
CrossCompiling
Windows64 to win32
SET CGO_ENABLED=1 SET GOARCH=386 go build main.goOther to windows
GOOS=windows GOARCH=amd64 CGO_ENABLED=1 CC=x86_64-w64-mingw32-gcc CXX=x86_64-w64-mingw32-g++ go build -x ./// CC=mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev1\mingw64\bin\gcc.exe // CXX=mingw-w64\x86_64-7.2.0-win32-seh-rt_v5-rev1\mingw64\bin\g++.exeSome discussions and questions, please see issues/228, issues/143.
Authors
Robotgo is primarily distributed under the terms of both the MIT license and the Apache License (Version 2.0), with portions covered by various BSD-like licenses.
See LICENSE-APACHE, LICENSE-MIT.