Robotgo
Golang Desktop Automation. Control the mouse, keyboard, bitmap, read the screen, Window Handle and global event listener.
RobotGo supports Mac, Windows, and Linux(X11).
This is a work in progress.
Contents
Docs
Requirements:
Now, Please make sure Golang, GCC, zlib and libpng is installed correctly before installing RobotGo.
If you do not need bitmap, you can switch to the robot branch, where there is no zlib and libpng dependency.
ALL:
Golang
GCC
zlib & libpng (bitmap)
For Mac OS X:
Xcode Command Line Tools
brew install libpng
brew install homebrew/dupes/zlib
For Windows:
MinGW or other GCC
zlib & libpng (bitmap need it.)
Zlib & libpng Windows32 GCC's Course
Download include zlib & libpng Windows64 GCC
For everything else:
GCC
X11 with the XTest extension (also known as the Xtst library)
Event:
xcb, xkb, libxkbcommon
Ubuntu:
sudo apt-get install gcc libc6-dev
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
sudo apt-get install libxtst-dev libpng++-dev
sudo apt-get install xcb libxcb-xkb-dev x11-xkb-utils libx11-xcb-dev libxkbcommon-x11-dev
sudo apt-get install libxkbcommon-dev
sudo apt-get install xsel
sudo apt-get install xclip
Fedora:
sudo dnf install libxkbcommon-devel libXtst-devel libxkbcommon-x11-devel xorg-x11-xkb-utils-devel
sudo dnf install libpng-devel
sudo dnf install xsel
sudo dnf install xclip
Installation:
go get github.com/go-vgo/robotgo
It's that easy!
png.h: No such file or directory? Please see issues/47.
Update:
go get -u github.com/go-vgo/robotgo
Examples:
Mouse
package main
import (
"github.com/go-vgo/robotgo"
)
func main() {
robotgo.ScrollMouse(10, "up")
robotgo.MouseClick("left", true)
robotgo.MoveMouseSmooth(100, 200, 1.0, 100.0)
}
Keyboard
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
robotgo.TypeString("Hello World")
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)
}
}
Screen
package main
import (
"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)
}
Bitmap
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
bitmap := robotgo.CaptureScreen(10, 20, 30, 40)
fmt.Println("...", bitmap)
fx, fy := robotgo.FindBitmap(bitmap)
fmt.Println("FindBitmap------", fx, fy)
robotgo.SaveBitmap(bitmap, "test.png")
}
Event
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
keve := robotgo.AddEvent("k")
if keve == 0 {
fmt.Println("you press...", "k")
}
mleft := robotgo.AddEvent("mleft")
if mleft == 0 {
fmt.Println("you press...", "mouse left button")
}
}
Window
package main
import (
"fmt"
"github.com/go-vgo/robotgo"
)
func main() {
fpid, err := robotgo.FindIds("Google")
if err == nil {
fmt.Println("pids...", fpid)
}
isExist, err := robotgo.PidExists(100)
if err == nil {
fmt.Println("pid exists is", isExist)
}
abool := robotgo.ShowAlert("test", "robotgo")
if abool == 0 {
fmt.Println("ok@@@", "ok")
}
title := robotgo.GetTitle()
fmt.Println("title@@@", title)
}
Plans
- Update Find an image on screen, read pixels from an image
- Update Window Handle
- Support UTF-8, transitional plan: TypeStr
- Try support Android, maybe support IOS
- Remove zlib/libpng dependencies
Donate
Supporting robotgo, buy me a coffee.
Paypal
Donate money by paypal to my account [email protected]
Contributors
- See contributors page for full list of contributors.
- See Contribution Guidelines.
License
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.